实现以下两个运算符 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.
这似乎是错误的。
自然语言的正确解释是什么?