0

实现以下两个运算符 has 和 of 以这样的方式使用短语:peter has car of john 回答以下问题:Who has What of 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(先前评估的结果)非常简单且清晰

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

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

如果我做:

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

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

一开始,II 最初解释为汽车属于 john 和 mary 的展位......所以我尝试介绍上一个示例的事实 3 个事实,但如果在 Prolog shell 中我尝试执行:

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

这似乎是错误的。

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

4

1 回答 1

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”当然不是传统的英语。

于 2013-03-29T18:01:15.433 回答