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
,以避免沿着负数的无限递归