我在 Prolog 中有以下关于自然语言的练习:
实现以下两个运算符has和of以这样的方式使用短语: peter has car of john回答以下问题:Who has What of X
现在,我知道在英语中这听起来很糟糕,因为在英语中我们通常说:“peter has john's car”,但我是意大利人,我试图将意大利语的请求翻译成英语。我希望这个概念是清楚的。
所以我找到了以下 Prolog 解决方案,保存在一个文件中:
:-op(200,xfx,has).
:-op(100,xfx,of).
peter has car of john.
之后我在 Prolog shell 中查阅这个文件,我可以执行以下操作:
?- 彼得有约翰的车。
真的。
或者:
?- X 有 Z 的 Y。
X = 彼得,
Y = 汽车,
Z = 约翰。
太好了,它工作,但我不太清楚它是如何工作的,我对操作员优先级有一些疑问:
有运营商有 200 作为优先级值。 of运算符的优先级值为100 。
参考这句话:peter has car of john所以这意味着Prolog首先评估这部分句子:car of john(因为运算符的优先级较低,尊重has运算符),如果是真的,那么它会评估:pater has (先前评估的结果)。
几句话,我可以这样解读原文:
彼得有(约翰的车)
这是正确的吗?
另一个问题与运营商的类型有关。
在我的解决方案中,我对两个运算符都使用xfx类型,因为在这种句子中,我没有与多个运算符具有相同优先级的潜在歧义相关的问题(例如:a - b - c其中运算符 - 必须具有形式yfx )
我的问题是:我可以在我的 has 和 of 运算符上以某种方式使用 xfy 和\或 yfx 混合获得相同的结果吗?