1
到目前爲止,我的程序可以將兩個數字加起來。執行謂詞減法
s(0)
代表1
,s(s(0))
代表2
等
p(0)
代表-1
,p(p(0))
是-2
等
我希望能夠調用程序,使得
add2(s(s(0)), p(0), Z).
回報
Z = s(0).
我的代碼如下:
numeral(0).
numeral(s(X)) :- numeral(X).
add(0,X,X).
add(s(X),Y,s(Z)) :- add(X,Y,Z).
numeral(X+Y) :- numeral(X), numeral(Y).
add2(X,Y,Z):-add(X,Y,Z).
add2(X+Y, Z,A) :-add(X,Y,R),add2(R,Z,A).
add2(Z,X+Y,A) :-add(X,Y,R),add2(Z,R,A).
numeral(p(X)) :- numeral(X).
add2(p(X),Y,p(Z)) :- add2(X,Y,Z).
p(s(X)) =:= 0.
s(p(X)) =:= 0.
我的邏輯是,如果p(s(0))
是在列表中,它只能將其等同於0
..我錯了,但是。有人知道該怎麼辦?