问题是当我实现这个问题时:
for(+N1,+N2,+Step,N)
for(1,7,2,N).
N=1;
N=3;
N=5;
N=7
true
我所做的代码是:
for(N1,_,_,N1).
for(N1,N2,Step,N):- N1 < N2, N1S is N1 + Step, for(N1S,N2,Step,N).
但是当它运行时它会显示:
?- for(1,7,2,N).
N = 1 ;
N = 3 ;
N = 5 ;
N = 7 ;
false.
我认为必须在N=7;
True
之后显示,但它显示为false
。
我想在我写的代码中,有一些我想念的东西。
答案 0 :(得分:1)
false
不应该打扰你;就像@nhahtdh已经指出的那样,只是在那里通知你Prolog的回溯引擎没有路径。
但是如果你坚持, 可以通过使用剪切来阻止false
。
for(N1, N2, Step, N1) :- N1 =< N2, N1 + Step > N2, !.
for(N1, N2, _, N1) :- N1 =< N2.
for(N1, N2, Step, N) :- N1S is N1 + Step, N1S =< N2, for(N1S, N2, Step, N).
答案 1 :(得分:-2)
我的老师告诉我另一个更容易的方法,最后用True
来实现。
for(N1,_,_,N1).
for(N1,N2,Step,N):- N1 < N2, N1S is N1 + Step, for(N1S,N2,Step,N).
for(_,_,_,_).