我尝试过使用Code但它没有用。这段代码中的错误是什么??
asc(0):-
write(0).
asc(X):-
asc(X-1),
write(X).
答案 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
以避免沿负数进行无限递归。