我几天前拿起了prolog,我有点坚持这个问题。我希望递归地减去一个数字,直到该数字小于0.伪代码如下:
N:=0
while(Y>=X)
{
Y := Y-X
N := N+1
Y := Y+2
}
例如,如果我有Y=20
和X=10
,那么我们会得到N=2
和Y=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命令提示符调用sufficient
为sufficient(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
不完全是一个减法?关于如何做的任何想法?