如何使用递归在Prolog中编写程序以打印1到10的数字?
我已经尝试了以下但是它不起作用,你能告诉我为什么吗?
print_numbers(10) :- write(10).
print_numbers(X) :- write(X),nl,X is X + 1, print_numbers(X).
答案 0 :(得分:9)
您的代码非常接近工作。问题是您无法重用X,一旦实例化,就无法更改(有关详细信息,请参阅here)。使用新变量,如下所示:
print_numbers(10) :- write(10), !.
print_numbers(X) :- write(X), nl, Next is X + 1, print_numbers(Next).
将剪切(!)添加到结尾将阻止解释程序询问您是否要查看更多结果。
?- print_numbers(1).
1
2
3
4
5
6
7
8
9
10
Yes
?-
答案 1 :(得分:0)
自从我写任何序言以来, 认真 很长一段时间,但我可能会做的事情略有不同。这样的事,虽然我不能在妈妈那里测试。
print_increasing_numbers(From, To):- From > To, !, write('ERROR: From > To').
print_increasing_numbers(To, To):- !, write(To).
print_increasing_numbers(From, To):- write(From),
nl,
Next is From + 1,
print_increasing_numbers(Next, To).
这里的一个关键区别是!
或切割操作,它会停止回溯。如果你没有包含它,那么当X
为10时你将获得带有第一个子句的解决方案,但如果你要求第二个解决方案,它将回溯并匹配第二个子句。这将导致一个比你想要的更大的数字列表。
答案 2 :(得分:0)
print_from_1_to_10 :-
print_from_X_to_10(1).
print_from_X_to_10(X) :-
(
X > 10
->
fail
;
writeln(X),
NewX is X + 1,
print_from_X_to_10(NewX)
).
答案 3 :(得分:0)
只需从终端
调用defineXandY即可defineXandY :-
print_one_to_ten(1,10).
print_one_to_ten(X,Y) :-
X<Y,
write(X),nl,
NewX is X+1,
print_one_to_ten(NewX,Y).