Prolog递归减法

时间:2016-12-02 16:18:21

标签: prolog

我几天前拿起了prolog,我有点坚持这个问题。我希望递归地减去一个数字,直到该数字小于0.伪代码如下:

N:=0
while(Y>=X)
{
    Y := Y-X
    N := N+1
    Y := Y+2
}

例如,如果我有Y=20X=10,那么我们会得到N=2Y=4

有什么想法吗?提前致谢。任何帮助赞赏。我正在使用SWI Prolog。

编辑1 到目前为止我所取得的成就是(虽然我不确定它是否正确):

sufficient(X, Y, M, N, F) :- 
    F is Y-X,
    Y>=X,
    plus(M, 1, N),
    sufficient(X, F, N, N, F).

我在查找基本案例时遇到了问题,我对如何实现它感到困惑。另外,在我已实现的sufficient中,显然当Y<X终止返回false时。有没有办法在终止之前获得N和F?我觉得我不是在考虑&#34; prolog&#34;因为我主要用在C和那个联盟我的想法。感谢。

编辑2

我找到了我的基本案例,但我可以停止递归,但是我无法设法找到正确的值。我的代码:

sufficient(X, Y, M, N, F) :- Y<X.
sufficient(X, Y, M, N, F) :- 
   F is Y-X,
   plus(M, 1, N),
   sufficient(X, F, N, D, E).

Thing是在第一次递归之后,例如,如果我从swi prolog命令提示符调用sufficientsufficient(10,21,0,N,F).,我将得到N = 1和F = 11。之所以发生这种情况,是因为我创建了2个新变量D和E.如果我没有创建这两个新变量(D and E),那么在代码中的第3个sufficient我会调用{{1}我在行N and F处代替D and E,得到F is Y-X,因为false是11而F是1.我是否必须设置a减法函数本身,因为Y-X不完全是一个减法?关于如何做的任何想法?

0 个答案:

没有答案