Recursion 在序言中按升序打印0到10

Recursion 在序言中按升序打印0到10,recursion,prolog,Recursion,Prolog,我已经尝试了以下代码,但它没有工作。此代码中的错误是什么 asc(0):- write(0). asc(X):- asc(X-1), write(X). 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. 因此,您必须分别计算X-1的值,并将结果传

我已经尝试了以下代码,但它没有工作。此代码中的错误是什么

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

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.
因此,您必须分别计算
X-1
的值,并将结果传递给递归调用,而不是调用
asc(X-1)

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

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

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.
因此,您必须分别计算
X-1
的值,并将结果传递给递归调用,而不是调用
asc(X-1)

asc(0) :-
    write(0).
asc(X) :-
    X > 0,
    X1 is X - 1,
    asc(X1),
    write(X).
需要保护
X>0
,以避免沿着负数的无限递归