【问题标题】:Interpretation of Prolog's operator in an exerciseProlog的算子在练习中的解读
【发布时间】:2013-03-19 07:10:23
【问题描述】:

我在 Prolog 中有以下关于自然语言的练习:

实现以下两个运算符 hasof 以这样的方式使用短语: 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


    【解决方案1】:

    正确吗? 是的。

    xfx 表示运算符“支配”其分支,而xfyyfx 代表“列表构造”,从某种意义上说,允许相同 优先级的链接表达式。

    对于您的短语,您使用了正确的操作声明,但如果您认为有必要,您可以使用其他关联说明符。

    我看到 xfy 可能用于of,例如“彼得有玛丽约翰的车”。 之后

    :- op(100, xfy, of).
    :- op(200, xfx, has).
    

    我明白了

    ?- write_canonical(peter has car of john of mary).
    has(peter,of(car,of(john,mary)))
    true.
    

    【讨论】:

    • Tnx 这么多!现在我似乎更清楚了在 of 运算符中可能使用 xfy 形式。现在我将在文档中阅读有关 write_canonical 的更多信息。 Tnx 这么多
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多