2011-11-28 11 views
5

Poniższy kod jest kodem Prolog co daje wszystkie liczby całkowite większe niż 0. Za każdym razem umieścić ; w tłumacza, daje kolejny numer:Jak wydrukować liczby od 1 do 100 w Prologu?

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

Czy istnieje sposób, gdzie daje liczb pomiędzy 0 a Tylko 100. Kiedy osiągnie 100, powinien się zatrzymać.

Odpowiedz

2

Jaki ładny quizu. Bardzo dobrze ilustruje to, jak trudno jest kontrolować rekursję za pomocą minimalnych narzędzi zdefiniowanych przez Prolog. Musimy popełnienia naszego rozwiązania do wartości poniżej określonych wartości granicznych, ograniczając otherless niezwiązanego wyszukiwania:

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

Oto wyjście ślad ograniczając zakresu do 3 (tj ... Y >= 3, ! ; ...)

?- is_integer(X). 
X = 0 ; 
X = 1 ; 
X = 2 ; 
X = 3 ; 
true. 
5

Istnieje wbudowany predykat between/3 do tego celu w B, Ciao, SICStus (biblioteka), SWI, YAP, XSB (biblioteka).

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

Jeśli zaczniesz się uczyć Prolog, lepiej spróbować użyć s(X) liczb pierwszych, które są o wiele łatwiejsze do zrozumienia i powodem około. Ten sam przykład, ale tylko dzieje się na 3:

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

z definicją:

nat_nat_sum(0,I,I). 
nat_nat_sum(s(I),J,s(K)) :- 
    nat_nat_sum(I,J,K). 
Powiązane problemy