add(0,Y,Y).
add(s(X),Y,Z):-
add(X,Y,Z1),
Z is s(Z1).
为什么总是导致错误为什么编译器告诉我算术:'s(_2676)' 不是函数
add(0,Y,Y).
add(s(X),Y,Z):-
add(X,Y,Z1),
Z is s(Z1).
为什么总是导致错误为什么编译器告诉我算术:'s(_2676)' 不是函数
您将谓词调用与复合术语混淆了。您尚未定义s/1
谓词。所以编译器会抛出一个错误。is
不是通用赋值,它是算术评估器。你应该=
改用。
以下应该工作。在这里,当我写 时s(X)
,这不是谓词调用,而是复合词。
add(0, X, X).
add(s(X), Y, Z) :- Z = s(Z1), add(X, Y, Z1).
或这个
add(0, X, X).
add(s(X), Y, s(Z)) :- add(X, Y, Z).
?- add(s(s(s(0))), s(s(0)), X).
X = s(s(s(s(s(0))))).