【问题标题】:write_canonical() and natural language interpretationwrite_canonical() 和自然语言解释
【发布时间】:2013-03-29 16:57:50
【问题描述】:

以这样的方式实现以下两个运算符 has 和 of 像这样的短语:peter has car of john 回答以下问题: 谁有X的什么

我有一个简单的程序,它定义了两个运算符:has(指定谁拥有什么)和of(指定谁拥有什么)

这是写在 Prolog 源文件中的解决方案:

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

peter has car of john.
peter has car of mary.

car of john of mary.

我可以在与 write_canonical() 函数相关的官方 SWI Prolog 文档中看到:http://www.swi-prolog.org/pldoc/man?predicate=write_canonical%2F1

使用标准括号在当前输出流上写入 Term 前缀表示法(即忽略运算符声明)。原子 需要引用引号。

所以如果我在 write_canonical() 函数中启动 Prolog 查询:

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

我得到Prolog是如何解释自然语言形式的,对吗?

在前面的例子中,首先评估句子:(car of john),然后评估句子:peter has (result of previous evaluation)

有以下解释:peter has (car of john)

好的,这很清楚......现在我们来回答我的问题。

如果我这样做:

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

如何用自然语言解释它? (如果这在自然语言中有意义的话)

一开始我最初的解释是汽车属于约翰和玛丽的展位......所以我尝试介绍前面示例的事实 3 事实,但如果在 Prolog shell 中我尝试执行:

10 ?- peter has car of john of mary.
false.

这似乎是错误的。

自然语言的正确解释是什么?

【问题讨论】:

    标签: prolog declarative


    【解决方案1】:

    在阅读您之前关于此问题的问题和 CapelliC 的回答时,我做了双重考虑。它应该是实际阅读的,

    “彼得有一辆车,属于约翰, [约翰]属于玛丽。”

    您的解释应该是(使用write_canonical)类似于:

    has(peter, of(car, [john,marry]))
    

    或许

    has(peter, of(car, john)), has(peter, of(car, marry))
    

    取决于你想如何实现它,而且,如果它实际上是同一辆车(这在你的例子中并不完全清楚)。

    “Peter has car of John of Mary”当然不是传统的英语。

    【讨论】:

    • 嗯好吧...但是,如果我在我的事实列表中添加以下事实:玛丽的约翰。 (指定 john 属于 mary)...如果然后我进入 prolog shell 并尝试执行查询:peter has car of john of Mary。这个结果 FALSE...为什么?我有“约翰的彼得哈车”事实和“玛丽的约翰”事实......为什么不是真的?
    • 我还尝试将这两个事实添加到我的 Prolog 程序的事实列表中:玛丽的约翰。和玛丽的安。但如果我执行查询: john of mary of ann。这个结果 FALSE...这很奇怪,因为我已经声明我的 of 运算符具有 xfy 形式...有什么问题? TNX
    猜你喜欢
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 2015-10-28
    • 2013-03-06
    • 1970-01-01
    相关资源
    最近更新 更多