首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prolog -算子的优先级- Bratko -第3章

Prolog -算子的优先级- Bratko -第3章
EN

Stack Overflow用户
提问于 2019-01-06 08:18:45
回答 1查看 166关注 0票数 3

我正在完成Ivan的“人工智能Prolog编程”第三章中的练习。

练习3.13指出:

建议对运算符(“was”、“of”、“the”)有一个适当的定义,以便能够写出这样的子句: 戴安娜是该部门的秘书。。 然后问Prolog: -谁是这个部门的秘书 王妃 -戴安娜是什么 这个部门的秘书。

这项工作的答案是:

代码语言:javascript
复制
:- op(300, xfx, was).
:- op(200, xfx, of).
:- op(100, fx, the).

然而,我不知道“戴安娜是这个部门的秘书”这个词的结构会是什么样子。我知道,优先级最高的算子是表达式的主函子,所以在这种情况下,主函子是“was”。

我对这个词的结构的回答是:

代码语言:javascript
复制
was(diana, of(the(secretary, the(department))).

我不知道我的答案是否正确,所以我想知道是否有人能帮助澄清这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-06 08:40:31

ISO谓词是以规范方式打印此类表达式的 [swi-doc],例如:

代码语言:javascript
复制
?- write_canonical(Who was the secretary of the department).
was(_,of(the(secretary),the(department)))
true.

所以我们看到,the/1of/2was/2绑定得更紧密。

当然,这不仅仅是Prolog的猜测,您可以在 [swi-doc]调用中定义优先级。第一个参数是优先级。文件说:

Precedence是介于0到1200之间的整数。(...)对于x,参数的优先级必须严格地降低。一个项的优先级是0,除非它的主函子是一个算子,在这种情况下,优先级是这个算子的优先级。括在括号中的术语( ... )具有优先级0。

因此,如果优先级较低,则绑定“更近”。方括号具有0的优先级,因此对所有其他运算符具有“优先级”。

因为您定义中的the/1操作符具有优先100,因此这意味着the绑定更紧密,of/2将绑定在比the/1更高的级别上,而was/2将在语法树中绑定的级别高于of/2

因此,如果您想添加一个事实,即diana是该部门的秘书,您应该这样写一个事实:

代码语言:javascript
复制
was(diana, of(the(secretary), the(department))).

然后我们可以查询如下:

代码语言:javascript
复制
?- Who was the secretary of the department.
Who = diana.
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54059800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档