2011-11-28 108 views
5

El siguiente código es un código Prolog que da todos los números enteros mayores que 0. Cada vez que pongo ; en el intérprete, se da el siguiente número:Cómo imprimir números del 1 al 100 en Prolog?

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

¿Hay una manera en la que da números entre 0 y 100 solo Cuando llegue a 100, debería detenerse.

Respuesta

2

Lo que un buen cuestionario. Ejemplifica muy bien lo difícil que puede ser controlar la recursión con las herramientas mínimas que define Prolog. Debemos comprometernos nuestras soluciones a valores inferiores al límite predefinido, lo que restringe la búsqueda otherless no unido:

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

Aquí es el resultado de seguimiento que limita el rango de 3 (es decir ... Y >= 3, ! ; ...)

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

Hay un predicado incorporado between/3 para ese propósito en B, Ciao, SICStus (biblioteca), SWI, YAP, XSB (biblioteca).

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

Si usted comienza a aprender Prolog, mejor tratar de usar s(X) números primeros que son mucho más fáciles de entender y razonar acerca. El mismo ejemplo, pero sólo va hasta 3:

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

con la definición:

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