首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Prolog -复项的统一化

Prolog -复项的统一化
EN

Stack Overflow用户
提问于 2021-08-31 13:28:55
回答 1查看 100关注 0票数 1

我目前正在为人工智能考试学习,我最后要复习的是Prolog。

下面你可以看到我必须解决的问题:

如果可能,将uncle(brother(W), Q)uncle(john, mother(S))统一起来

我完全迷失了作为一个高层次,它没有统一,但我想我的知识是有点过时。

如果可能的话,有人能帮我理解如何将它们统一起来吗?我不明白如何把函子和原子结合起来。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-31 15:24:28

我发现,在学习语法统一时,如果首先将术语分解为抽象语法树,然后进行统一,效果会更好。对嵌套列表进行分解确实有帮助。因此,在分解之后,brother(W)试图与john统一,这将失败。一旦失败,您就可以跳过统一过程的其余部分。

虽然这些不是抽象语法树,但谓词=..。write_term帮助将复杂的术语转换为AST。

使用=./2

代码语言:javascript
运行
复制
?- uncle(brother(W),Q) =.. List.
List = [uncle, brother(W), Q].

?- uncle(john,mother(S)) =.. List.
List = [uncle, john, mother(S)].

然后试图把各个术语统一起来

代码语言:javascript
运行
复制
?- brother(W) = john.
false.

对于Prolog列表,请使用with _term/2和选项dotlists(true)

代码语言:javascript
运行
复制
?- write_term([a],[dotlists(true)]).
.(a,[])
true.

?- write_term([a,b],[dotlists(true)]).
.(a,.(b,[]))
true.

?- write_term([a,B],[dotlists(true)]).
.(a,.(_15276,[]))
true.

?- write_term([a,[b]],[dotlists(true)]).
.(a,.(.(b,[]),[]))
true.

?- write_term([a,b,[c],[d,[e,[f],g]],h],[dotlists(true)]).
.(a,.(b,.(.(c,[]),.(.(d,.(.(e,.(.(f,[]),.(g,[]))),[])),.(h,[])))))
true.

在本文中,帖子中有一些用于学习语法统一的实际AST。

对于语篇的限制,我不能像我想要的那样使图像与实际的Prolog术语一致,但总比没有它们好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68999599

复制
相关文章

相似问题

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