【发布时间】:2013-09-27 11:16:21
【问题描述】:
我正在编写一些 Peano 算术以更好地学习 Prolog。以下是我想出的代码,看起来和我在网上其他地方看到的一样:
add(X,z,X).
add(X,s(Y),s(Z)) :- add(X,Y,Z).
mult(_,z,z).
mult(X,s(Y),W) :- mult(X,Y,Z), add(X,Z,W).
但是,如果我尝试进行简单的查询,例如 0 的除数对,我会遇到问题:
| ?- mult(X,Y,z).
Y = z ? ;
X = z
Y = s(z) ? ;
X = z
Y = s(s(z)) ? ;
X = z
Y = s(s(s(z))) ? ;
Fatal Error: global stack overflow (size: 32768 Kb, reached: 32765 Kb, environment variable used: GLOBALSZ)
我真的很烦,至于它怎么能一直到Y = 3,而不是Y = 4?
【问题讨论】:
-
这是一个非常奇怪的行为,而且很难追查...我想知道这个数量是否可能与错误有关。
标签: prolog stack-overflow failure-slice successor-arithmetics