2011-11-28 3 views
5

Il seguente codice è un codice di prologo che dà tutti i numeri interi superiore a 0. Ogni volta che ho messo ; nell'interprete, dà il numero successivo:Come stampare numeri da 1 a 100 in Prolog?

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

C'è un modo in cui si dà numeri compresi tra 0 e Solo 100. Quando raggiunge i 100 dovrebbe fermarsi.

risposta

2

Che bel quiz. Esso esemplifica molto bene quanto possa essere difficile controllare la ricorsione con gli strumenti minimi definiti da Prolog. Dobbiamo impegnarci le nostre soluzioni a valori inferiori al limite predefinito, limitando la otherless di ricerca non legata:

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

Ecco l'output di analisi che limita il campo a 3 (vale a dire ... Y >= 3, ! ; ...)

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

Esiste un predicato incorporato between/3 a tale scopo in B, Ciao, SICStus (libreria), SWI, YAP, XSB (libreria).

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

Se si inizia a imparare Prolog, meglio provare ad usare s(X) numeri primi, che sono molto più facili da capire e ragionare su. Lo stesso esempio, ma solo andando fino a 3:

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

con la definizione:

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