write_canonical()和自然语言解释

时间:2013-03-29 16:57:51

标签: prolog declarative

  

以这样的方式实现以下两个运算符   用以下短语:彼得有约翰的车回答问题,如:   谁有什么X

我有这个简单的程序,定义了两个操作符:(指定谁拥有什么)和 (指定谁拥有什么)

这是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

  

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

因此,如果我在write_canonical()函数中启动Prolog查询:

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

我知道Prolog如何解释自然语言形式,是不是?

在前一种情况下,它很简单,看起来很清楚,首先评估句子:(约翰的车),然后评估句子:彼得有(先前评估的结果)< /强>

具有以下解释:彼得有(约翰的车)

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

如果我这样做:

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

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

在开始时II最初被解释为汽车属于约翰和玛丽的摊位......所以我试图介绍前一个例子中的3个事实,但如果在Prolog shell中我尝试执行:

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

这似乎是假的。

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

1 个答案:

答案 0 :(得分:1)

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

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

你的解释应该是(使用write_canonical)类似的东西:

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

或者

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

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

“彼得有约翰玛丽的车”当然不是传统的英语。