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

use*_*821 5 prolog

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

is_integer(0).
is_integer(X) :- is_integer(Y),X is Y+1.
Run Code Online (Sandbox Code Playgroud)

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

fal*_*lse 5

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

?- between(0,100,X).
X = 0 ;
X = 1 ;
...
X = 100.
Run Code Online (Sandbox Code Playgroud)

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

?- nat_nat_sum(N,_,s(s(s(0)))).
Run Code Online (Sandbox Code Playgroud)

定义:

nat_nat_sum(0,I,I).
nat_nat_sum(s(I),J,s(K)) :-
   nat_nat_sum(I,J,K).
Run Code Online (Sandbox Code Playgroud)


Cap*_*liC 3

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

is_integer(0).
is_integer(X) :-
    is_integer(Y),
    ( Y >= 100, ! ; X is Y + 1 ).
Run Code Online (Sandbox Code Playgroud)

这是将范围限制为 3 的跟踪输出(即... Y >= 3, ! ; ...

?- is_integer(X).
X = 0 ;
X = 1 ;
X = 2 ;
X = 3 ;
true.
Run Code Online (Sandbox Code Playgroud)