prolog: X > Y 打破循环
prolog: X > Y breaks the cycle
我正在尝试在 prolog 中实现类似于 while 循环的东西,但是当 X > Y
是 false
时它会中断并且什么都不做。
示例:
loop(X, Y):-
X > Y,
Y1 is Y +1,
loop(X,Y1),
write(Y), tab(1).
有没有什么方法可以让它在不改变循环和写入的情况下工作?
简单:
loop(X, Y):- X < Y.
loop(X, Y):-
X >= Y,
Y1 is Y +1,
loop(X,Y1),
write(Y), tab(1).
这是我的 运行:
?- loop(10,1).
10 9 8 7 6 5 4 3 2 1
您可以添加一个基本案例以防止其损坏。
loop(Y,Y).
loop(X, Y):-
X > Y,
Y1 is Y +1,
loop(X,Y1),
write(Y), tab(1).
输出:
9 8 7 6 5 4 3 2 1
true
如果你想让它继续到10那么你就需要这样调整它。
loop(X,Y):- succ(X,Y). % stop at Y #= X + 1
loop(X, Y):-
X >= Y, % until X = Y
Y1 is Y +1,
loop(X,Y1),
write(Y), tab(1).
我正在尝试在 prolog 中实现类似于 while 循环的东西,但是当 X > Y
是 false
时它会中断并且什么都不做。
示例:
loop(X, Y):-
X > Y,
Y1 is Y +1,
loop(X,Y1),
write(Y), tab(1).
有没有什么方法可以让它在不改变循环和写入的情况下工作?
简单:
loop(X, Y):- X < Y.
loop(X, Y):-
X >= Y,
Y1 is Y +1,
loop(X,Y1),
write(Y), tab(1).
这是我的 运行:
?- loop(10,1).
10 9 8 7 6 5 4 3 2 1
您可以添加一个基本案例以防止其损坏。
loop(Y,Y).
loop(X, Y):-
X > Y,
Y1 is Y +1,
loop(X,Y1),
write(Y), tab(1).
输出:
9 8 7 6 5 4 3 2 1
true
如果你想让它继续到10那么你就需要这样调整它。
loop(X,Y):- succ(X,Y). % stop at Y #= X + 1
loop(X, Y):-
X >= Y, % until X = Y
Y1 is Y +1,
loop(X,Y1),
write(Y), tab(1).