在序言中按升序排列0到10

时间:2018-04-27 17:13:54

标签: recursion prolog

我尝试过使用Code但它没有用。这段代码中的错误是什么??

asc(0):-
    write(0).
asc(X):-
    asc(X-1),
    write(X).

1 个答案:

答案 0 :(得分:2)

Prolog没有像其他语言那样自动计算值的算术表达式。 X-1不表示算术值;这只是一个术语。

?- X = 5, Y = X - 1.
X = 5,
Y = 5-1.

要计算算术值,您必须使用is/2谓词:

?- X = 5, Y is X - 1.
X = 5,
Y = 4.

因此,您必须单独计算asc(X-1)的值并将该结果传递给递归调用,而不是调用X - 1

asc(0) :-
    write(0).
asc(X) :-
    X > 0,
    X1 is X - 1,
    asc(X1),
    write(X).

需要保护X > 0以避免沿负数进行无限递归。