0
add(0,Y,Y).
add(s(X),Y,Z):-
     add(X,Y,Z1),
    Z is s(Z1).

为什么总是导致错误为什么编译器告诉我算术:'s(_2676)' 不是函数

4

1 回答 1

0

您将谓词调用与复合术语混淆了。您尚未定义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))))).
于 2021-05-03T04:14:39.677 回答