У меня есть этот очень простой код для представления чисел. Проблема в том, что я использую функцию 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).