【发布时间】:2021-05-03 02:58:53
【问题描述】:
add(0,Y,Y).
add(s(X),Y,Z):-
add(X,Y,Z1),
Z is s(Z1).
为什么总是导致 false 为什么编译器告诉我算术:'s(_2676)' 不是函数
【问题讨论】:
标签: prolog successor-arithmetics
add(0,Y,Y).
add(s(X),Y,Z):-
add(X,Y,Z1),
Z is s(Z1).
为什么总是导致 false 为什么编译器告诉我算术:'s(_2676)' 不是函数
【问题讨论】:
标签: prolog successor-arithmetics
您将谓词调用与复合术语混淆了。您尚未定义 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))))).
【讨论】: