Prolog重新算法

时间:2016-12-01 21:35:32

标签: algorithm recursion prolog

foo(0,Y,Z) :- Z is Y.
foo(X,0,Z) :- Z is X.
foo(X,Y,Z) :- X>=Y, M1 is X-2, foo(M1, Y, Zx), Z is Zx + Y.
foo(X,Y,Z) :- Y<X, N1 is Y-3, foo(X, N1, Zx), Z is Zx + X.

所以这是我的计划,这就是我想要完成的事情

(,)= {

≤0

≤0

+( - 2,)≥

+(, - 3)&lt; }

为什么我的程序没有输出任何内容? 这就是我想我说的 -

如果X = 0,foo(0,Y,Z),则返回Z作为Y. 如果Y = 0,foo(0,Y,Z),则返回Z作为X。

如果X> = Y,则再次执行foo,一旦返回,则返回Z作为Zx + Y. 如果是X.

我的想法是否正确?

1 个答案:

答案 0 :(得分:0)

我记得你的功能是

   ≤ 0
   ≤ 0

即“较少 等于零”而不是“等于零”。

所以我想那个

foo(0,Y,Z) :- Z is Y.

应该是

foo(X, Y, Y) :- X =< 0.

那个

foo(X,0,Z) :- Z is X.

应该是

foo(X, Y, X) :- Y =< 0.