我目前正在为人工智能考试学习,我最后要复习的是Prolog。
下面你可以看到我必须解决的问题:
如果可能,将uncle(brother(W), Q)
与uncle(john, mother(S))
统一起来
我完全迷失了作为一个高层次,它没有统一,但我想我的知识是有点过时。
如果可能的话,有人能帮我理解如何将它们统一起来吗?我不明白如何把函子和原子结合起来。
谢谢!
发布于 2021-08-31 15:24:28
我发现,在学习语法统一时,如果首先将术语分解为抽象语法树,然后进行统一,效果会更好。对嵌套列表进行分解确实有帮助。因此,在分解之后,brother(W)
试图与john
统一,这将失败。一旦失败,您就可以跳过统一过程的其余部分。
虽然这些不是抽象语法树,但谓词=..。write_term帮助将复杂的术语转换为AST。
使用=./2
?- uncle(brother(W),Q) =.. List.
List = [uncle, brother(W), Q].
?- uncle(john,mother(S)) =.. List.
List = [uncle, john, mother(S)].
然后试图把各个术语统一起来
?- brother(W) = john.
false.
对于Prolog列表,请使用with _term/2和选项dotlists(true)
?- 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术语一致,但总比没有它们好。
https://stackoverflow.com/questions/68999599
复制相似问题