这是教科书上的例子。
?- max(5,1,1).
true.
作业:程序为什么错了?我们怎样才能使程序正确呢?
EDIT
max(X, Y, X) :- X >= Y, !.
max(X, Y, Y).
我们的意图是说:
如果 X 大于 Y,then最大值是X。否则, 最大值必须为 Y。
相反,所说的是:
当第一个和第三个参数(X 和 Max)可以统一,并且 X 大于 Y 时,成功。否则,如果第二个和第三个参数(Y 和 Max)可以统一,则成功。
那么明显的问题就出现了,第一和第三个论点不能统一,但第二个和第三个可以统一。
Instead:
max(X, Y, X) :- X >= Y.
max(X, Y, Y) :- X < Y.
or
max(X, Y, Max) :- X >= Y, !, Max = X.
max(_, Max, Max).