【发布时间】:2013-03-19 07:10:23
【问题描述】:
我在 Prolog 中有以下关于自然语言的练习:
实现以下两个运算符 has 和 of 以这样的方式使用短语: peter has car of john 回答以下问题:谁拥有 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 = 约翰。
很好,它工作,但我不太清楚它是如何工作的,我对运营商优先级有一些疑问:
has 运算符有 200 作为 priority 值。 of 运算符的 priority 值为 100。
参考这句话:peter has car of john所以这意味着Prolog首先评估这部分句子:car of john(因为操作符的优先级较低尊重有运算符),如果为真,则评估:pater has(先前评估的结果)。
几句话,我可以这样解读原句:
彼得有(约翰的车)
对吗?
另一个问题与运营商的类型有关。
在我的解决方案中,我对两个运算符都使用了 xfx 类型,因为在这种句子中,我没有与多个运算符具有相同优先级的潜在歧义相关的问题(例如:a - b - c 其中运算符 - 必须采用 yfx)
形式我的问题是:我可以在我的 has 和 of 运算符上以某种方式使用 xfy 和\或 yfx 获得相同的结果吗?
【问题讨论】:
标签: prolog