我在使用YAP prolog撰写序言时遇到了障碍。我将我的问题分离到这两行代码:
is_a(G, A2):-is_a(G, A1), is_a_link(A1, A2).
is_a(x, y).
如果我将这两行代码放在一个文件中,并查阅该文件,请问prolog if is_a(x,y)
,该程序永远不会结束,这让我相信有一个无限循环。< / p>
但我不明白为什么会有一个循环,我只是问道其中一个公理是否正确,不应该(没有第二个想法)只是吐出Yes
?
我的意思是,据我了解prolog的工作方式,它会尝试在知识库中找到一个真实的陈述,并证明&#34;证明&#34;该声明。我很困惑为什么它不能简单地回归公理。
编辑:
切换代码行,即
is_a(x, y).
is_a(G, A2):-is_a(G, A1), is_a_link(A1, A2).
使prolog不会崩溃,因为它显然首先遇到了真实的陈述。
答案 0 :(得分:0)
将您的事实重命名为其他内容:
is_a_fact_or_whatever(x,y).
is_as(G,A2) :- is_a_fact_or_whatever(G,A1), is_a_link(A1,A2).