【发布时间】: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