如何在Prolog中打印1到100的数字?

时间:2011-11-28 04:30:32

标签: prolog

以下代码是Prolog代码,它给出了大于0的所有整数。每次我将;放入解释器时,它会给出下一个数字:

is_integer(0).
is_integer(X) :- is_integer(Y),X is Y+1.

有没有办法只给出0到100之间的数字。当它达到100时,它应该停止。

2 个答案:

答案 0 :(得分:5)

在B,Ciao,SICStus(库),SWI,YAP,XSB(库)中有一个内置的谓词between/3

?- between(0,100,X).
X = 0 ;
X = 1 ;
...
X = 100.

如果您开始学习Prolog,最好先尝试使用s(X)数字,这些数字更易于理解和推理。同样的例子,但最多只能达到3:

?- nat_nat_sum(N,_,s(s(s(0)))).

定义:

nat_nat_sum(0,I,I).
nat_nat_sum(s(I),J,s(K)) :-
   nat_nat_sum(I,J,K).

答案 1 :(得分:2)

这是一个很好的测验。它很好地说明了使用Prolog定义的最小工具来控制递归是多么困难。我们必须将我们的解决方案提交到低于预定义限制的值,从而限制其他无绑定搜索:

is_integer(0).
is_integer(X) :-
    is_integer(Y),
    ( Y >= 100, ! ; X is Y + 1 ).

以下是将范围限制为3(即... Y >= 3, ! ; ...

的跟踪输出
?- is_integer(X).
X = 0 ;
X = 1 ;
X = 2 ;
X = 3 ;
true.
相关问题