数字の表現として、この非常に単純なコードがあります。問題は add2 関数を使用するときです。
例:正しくadd2(s(0)+s(s(0)), s(s(0)), Z).
返されます。s(s(s(s(s(0)))))
しかしadd2(0, s(0)+s(s(0)), Z).
、常にreturns s(0)+s(s(0))
。なぜこれが起こっているのか誰にもわかりますか?
numeral(0).
numeral(s(X)) :- numeral(X).
numeral(X+Y) :- numeral(X), numeral(Y).
add(0,X,X).
add(s(X),Y,s(Z)) :- add(X,Y,Z).
%% exercise 1
add2(X,Y,R) :- add(X,Y,R).
add2(X+Y,Z,R) :- add(X,Y,A),add2(A,Z,R).
add2(X,Y+Z,R) :- add(Y,Z,A),add2(X,A,R).