2011-11-28 75 views
5

下面的代码是一个Prolog的代码,提供了比0。每次我把;在解释更大的所有整数,它提供了一个数字:如何在Prolog中将数字从1打印到100?

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

有它0到1之间的数字给人一种方式100只。当它达到100时,它应该停止。

回答

2

真是一个好测验。它很好地体现了使用Prolog定义的最小工具来控制递归的难度。我们必须致力于我们的解决方案为低于预定的限制,制约了otherless绑定搜索:

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. 
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). 
相关问题