我正在尝试制作一个除以两个 Peano 数字的程序。不幸的是,在我寻找其他答案后,循环开始运行。有什么方法可以避免使用我的方法重复吗?
s(0).
s(X):- X.
plus(0,Y,Y).
plus(s(X), Y, s(Z)):- plus(X,Y,Z).
minus(A, B, C) :- plus(C, B, A).
division(0, _ , 0).
division(X, s(0), X).
division(A, B, s(N)) :- minus(A, B, R), division(R, B, N).
输出
?- division(s(s(s(s(0)))), s(0),X).
X = s(s(s(s(0)))) ;
X = s(s(s(s(0)))) ;
X = s(s(s(s(0)))) ;
X = s(s(s(s(0)))) ;
X = s(s(s(s(0)))) ;
X = s(s(s(s(0)))) ;
false.
输出#2
?- divide(s(s(s(s(0)))), Y,X).
Y = s(0),
X = s(s(s(s(0)))) ;
Y = s(s(s(s(0)))),
X = s(0) ;
Y = X, X = s(s(0)) ;
Y = s(0),
X = s(s(s(s(0)))) ;
Y = s(0),
X = s(s(s(s(0)))) ;
Y = s(0),
X = s(s(s(s(0)))) ;
Y = s(0),
X = s(s(s(s(0)))) ;
Y = s(0),
X = s(s(s(s(0)))) ;
;ERROR: Out of local stack