我是逻辑编程和 Prolog 的新手。下面的 Prolog 程序定义了一个谓词add/3
,用于将第一个参数与第二个参数相乘,从而得到第三个参数,基于方程x + y = z等价于 ( x - 1) + y = ( z - 1) :
add(0, Y, Y) :-
number(Y).
add(X, Y, Z) :-
number(X),
number(Z),
succ(U, X),
succ(V, Z),
add(U, Y, V).
但是这个查询,应该解决方程 1 + 0 = z,不返回预期的结果 ( 1
):
?- add(1, 0, Z).
false.
如何解决这个递归加法?