到目前为止,我的程序可以将两个数字相加。
s(0)
代表1
,s(s(0))
代表2
等等
p(0)
代表-1
, p(p(0))
is-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
.. 但是我错了。有人知道该去哪里吗?