prolog: X > Y 打破循环

prolog: X > Y breaks the cycle

我正在尝试在 prolog 中实现类似于 while 循环的东西,但是当 X > Yfalse 时它会中断并且什么都不做。

示例:

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).