我开始学习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”。结果代码为我提供了所有结果。再说一遍,为什么呢?它仍然死循环。
如何解决?
我读了无限循环上的另一个答案。但是我希望有人根据这种情况做出回答。这对我有很大帮助。