prolog中的无限循环

时间:2015-10-29 18:40:48

标签: prolog

我在使用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不会崩溃,因为它显然首先遇到了真实的陈述。

1 个答案:

答案 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).