Prolog 断言,如果我们输入6作为参数,将生成A=6,B=0。。。A=4,B=2。。。A=2,B=4。。。A=0,B=6,结束
这就是我所拥有的:Prolog 断言,如果我们输入6作为参数,将生成A=6,B=0。。。A=4,B=2。。。A=2,B=4。。。A=0,B=6,结束,prolog,Prolog,这就是我所拥有的: values(Count, A, B) :- A is Count, B is 0. values(Count, A, B) :- values(Count, Aa, Bb), A is Aa-2, B is Bb+2, \+ A < 0; B < 0. 我明白了,但是解释器一直在运行,并耗尽了堆栈空间,因为递归值(Count,Aa,Bb)在开始时。我不知道如何重写它,以使递归不是无止境的,我
values(Count, A, B) :-
A is Count,
B is 0.
values(Count, A, B) :-
values(Count, Aa, Bb),
A is Aa-2,
B is Bb+2,
\+ A < 0;
B < 0.
我明白了,但是解释器一直在运行,并耗尽了堆栈空间,因为递归
值(Count,Aa,Bb)
在开始时。我不知道如何重写它,以使递归不是无止境的,我希望它在得到上述输出后结束。有人能帮忙吗?我会这样做:
val(A,A,0):-
A>=0.
val(C,A,B):-
CC is C-2,
CC >=0,
val(CC,A,BB),
B is BB+2.
输出是
?- val(6, A, B).
A = 6,
B = 0 ;
A = 4,
B = 2 ;
A = 2,
B = 4 ;
A = 0,
B = 6 ;
false.
那么有什么区别呢?我使用
Count
变量作为计数器。它必须在每一步中减少,以迫使递归结束。缺点是我必须确保计数器永远不小于零。我会这样做:
val(A,A,0):-
A>=0.
val(C,A,B):-
CC is C-2,
CC >=0,
val(CC,A,BB),
B is BB+2.
输出是
?- val(6, A, B).
A = 6,
B = 0 ;
A = 4,
B = 2 ;
A = 2,
B = 4 ;
A = 0,
B = 6 ;
false.
那么有什么区别呢?我使用
Count
变量作为计数器。它必须在每一步中减少,以迫使递归结束。缺点是我必须确保计数器永远不小于零。如果在/3之间使用,可能会更容易。你知道这个论点是正偶数吗
p(To0, A, B) :-
To is To0 div 2,
between(0, To, X),
A is (To - X) * 2,
B is X * 2.
如果在/3之间使用,可能会更容易。你知道这个论点是正偶数吗
p(To0, A, B) :-
To is To0 div 2,
between(0, To, X),
A is (To - X) * 2,
B is X * 2.
非常直截了当,谢谢!非常直截了当,谢谢!非常感谢你!非常感谢你!