これまでのところ、私のプログラムは 2 つの数値を足し合わせることができます。
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
でしたが、私は間違っていました。これでどこに行くべきか誰か知っていますか?