Prolog后继符表示法产生不完整的结果和无限循环

我开始学习Prolog,首先学习了后继符号。


这就是我在Prolog中编写Peano公理的地方。


参见PDF的第12页:


sum(0, M, M).

sum(s(N), M, s(K)) :-

    sum(N,M,K).


prod(0,M,0).

prod(s(N), M, P) :-

    prod(N,M,K),

    sum(K,M,P).

我将乘法规则放入Prolog。然后我执行查询:


?- prod(X,Y,s(s(s(s(s(s(0))))))).

这意味着基本上找到6的因数。


这是结果。


X = s(0),

Y = s(s(s(s(s(s(0)))))) ? ;

X = s(s(0)),

Y = s(s(s(0))) ? ;

X = s(s(s(0))),

Y = s(s(0)) ? ;

infinite loop

此结果有两个问题:


并未显示所有结果,请注意缺少结果X = 6,Y = 1。

除非我按Ctrl + C然后选择中止,否则它不会停止。

所以...我的问题是:


这是为什么?我尝试切换“ prod”和“ sum”。结果代码为我提供了所有结果。再说一遍,为什么呢?它仍然死循环。

如何解决?

我读了无限循环上的另一个答案。但是我希望有人根据这种情况做出回答。这对我有很大帮助。


慕姐4208626
浏览 622回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP