你如何编写Prolog中的程序来使用递归打印1到10的数字?
我尝试过以下但它不起作用,你能告诉我为什么吗?
print_numbers(10) :- write(10).
print_numbers(X) :- write(X),nl,X is X + 1, print_numbers(X).
Run Code Online (Sandbox Code Playgroud)
您的代码非常接近工作.问题是你不能重复使用X,一旦实例化,它就无法更改(有关更多详细信息,请参见此处).使用一个新变量,如下所示:
print_numbers(10) :- write(10), !.
print_numbers(X) :- write(X), nl, Next is X + 1, print_numbers(Next).
Run Code Online (Sandbox Code Playgroud)
将剪切(!)添加到末尾将阻止解释器询问您是否要查看更多结果.
?- print_numbers(1).
1
2
3
4
5
6
7
8
9
10
Yes
?-
Run Code Online (Sandbox Code Playgroud)
自从我写任何序言以来已经有很长一段时间了,但我可能会做一些不同的事情。类似这样的东西,虽然我现在无法测试。
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).
Run Code Online (Sandbox Code Playgroud)
这里的一个关键区别是!, 或 cut 操作,它会停止回溯。如果你不包含它,那么当X为 10 时,你将得到第一个子句的解决方案,但如果你要求第二个解决方案,它也会回溯并匹配第二个子句。这会导致数字列表比您想要的大得多。
| 归档时间: |
|
| 查看次数: |
9981 次 |
| 最近记录: |