sábado, 14 de junio de 2014

3.4 Prolog

Ejercicios.  

1. Defina la relación max(X,Y,Max) de tal modo que Max sea el mayor valor de los dos números X y Y.


i) En este caso , X=2, Y=5 y Max=8.

Entonces:

8 > 2, y , 8 > 5. Esto es cierto.


ii) X=7, Y=8 y Max=6.

Entonces:

6 > 7, 6 > 8. Esto es falso!!!



2. Defina el predicado maxlist(List, Max) de tal manera que Max sea el   mayor número de la lista List de números.




3. Defina el predicado sumlist(List, Sum) donde Sum es la suma de una lista de números dada en List. 



4. Defina el predicado ordenada(List) el cual es cierto (devolverá yes) si List es una lista ordenada de números en forma ascendente o descendente, por ejemplo,  

?- ordenada(1,5,6,6,9,12). 
Yes  




jueves, 5 de junio de 2014

3.2 Prolog

1. Escriba una meta, usando concat, para eliminar los tres últimos elementos de una lista L produciendo otra lista L1. Recomendación: L es la concatenación de L1 y una lista de tres elementos.  





2. Escriba una secuencia de metas para eliminar los tres primeros elementos y los tres últimos elementos de una lista L produciendo la lista L2. 




3. Defina la relación:  

          ultimo( Elemento, Lista)
  
de tal modo que Elemento sea el último elemento de la lista Lista. Escriba dos versiones: (a) usando la relación concat, y (b) sin usarla. 










Magdaly M.G

miércoles, 28 de mayo de 2014

2.3 Prolog

1. Considere el siguiente programa:  
f( 1, uno).    
f( s(1), dos).      
f( s(s(1)), tres).      
f( s(s(s(X))), N) :- f( X, N).  


¿cómo contestará Prolog las siguientes preguntas? Cuando sean posibles varias respuestas, dé al menos dos de ellas.  

(a). ?- f( s(1), A). 

Respuesta: 




(b). ?- f( s(s(1)), dos). 

Respuesta: 


(c). ?- f( s(s(s(s(s(s(1)))))), C). 

Respuesta: 


(d). ?- f( D, tres). 

Respuesta: 


2. El siguiente programa dice que dos personas son parientes si,  

(a). uno es predecesor del otro, ó   
(b). ambos tienen un predecesor común, ó   
(c). ambos tienen un sucesor común :      
parientes( X, Y) :- predecesor( X, Y).      
parientes( X, Y) :- predecesor( Y, X).      
parientes( X, Y) :- predecesor( Z, X), predecesor( Z, Y).      
parientes( X, Y) :- predecesor( X, Z), predecesor( Y, Z).  

¿ puede usted acortar el programa usando la notación de ';' ?  



3. Reescriba el siguiente programa sin utilizar la notación de ';' :  
     
traducir( Numero, Palabra) :-           
Numero = 1, Palabra = uno;           
Numero = 2, Palabra = dos;           
Numero = 3, Palabra = tres. 


2.4 Prolog

1. Considere el programa anterior y realice la traza de ejecución  a  la pregunta :  





          ?- enorme(X), oscuro(X).  


compare su traza de ejecución con la anterior, ya que  esencialmente  es la misma pregunta pero con otro orden. ¿En cuál de ambos  casos  Prolog realiza más trabajo antes de encontrar la respuesta final? 

Analizando:

(a). Pregunta.      
?- oscuro( X), enorme( X).        % Quién es oscuro y enorme ?  

Traza de la ejecución. 
(1). Lista inicial de metas : oscuro(X), enorme(X). 
(2). Examina el programa de arriba hacia abajo  buscando  una  cláusula cuya cabeza empate con la primera meta : oscuro(X). Se encuentra la cláusula 7 :  
               oscuro( Z) :- negro( Z).  

se reemplaza la primera meta con el cuerpo instanciado de la cláusula 7, dando una nueva lista de metas :  
               negro(X), enorme(X).  

(3). Examina el programa para encontrar un empatamiento de negro(X). Se encuentra la cláusula 5: negro( gato). Esta cláusula no  tiene  cuerpo, así que la lista de metas, luego de instanciarse se convierte en :  

               enorme(gato) 

(4). Examina el programa para buscar la meta enorme(gato), no se encuentra ninguna cláusula. Por lo tanto se realiza un proceso de backtracking al paso 3) y se elimina la instanciación X = gato. Ahora la lista de metas es de nuevo:  
               negro(X), enorme(X). 

Se continúa examinando el programa a partir de la cláusula 5. No se encuentra ninguna cláusula. Por lo tanto se realiza un proceso de backtracking nuevamente al paso (2) y se continúa examinando a partir de la cláusula 7. Se encuentra la cláusula 8:  
               oscuro(Z) :- cafe(Z).
  
Se reemplaza la primera meta en la lista de metas por cafe(X), dando:  
               cafe(X), enorme(X)  

(5). Examina el programa buscando empatar cafe(X), encuentra cafe(oso). Esta cláusula no tiene cuerpo, así que la lista de metas es ahora:  
               enorme(oso)  

(6). Examina el programa  y  encuentra  la  cláusula  enorme(oso).  Esta cláusula no tiene cuerpo, así que la lista de metas se queda vacía. Esto indica una terminación exitosa y la instanciación correspondiente a la variable queda como :  

               X = oso. 


b) Pregunta.      
?- enorme(X), oscuro(X).       % Quién es oscuro y enorme ?  

Traza de la ejecución. 
(1). Lista inicial de metas: enorme(X), oscuro(X).
(2). Examina el programa de arriba hacia abajo  buscando  una  cláusula cuya cabeza empate con la primera meta : enorme(X). Se encuentra en la cláusula 1:
enorme(oso).

Esta cláusula no  tiene  cuerpo, así que la lista de metas, luego de instanciarse se convierte en : 
oscuro(oso)

(3). Examina el programa para encontrar un empatamiento de oscuro(oso). Se encuentra la cláusula 7:

oscuro( Z) :- negro( Z).  

se reemplaza la primera meta con el cuerpo instanciado de la cláusula 7, dando una nueva lista de metas :  
               enorme(oso), negro(oso). 

(4). Examina el programa para buscar la meta negro(oso), no se encuentra ninguna cláusula. Por lo tanto se realiza un proceso de backtracking al paso 3) y se elimina la instanciación negro(oso). Ahora la lista de metas es de nuevo:  
               enorme(oso), oscuro(oso). 

Se continúa examinando el programa a partir de la cláusula 7. Se encuentra la cláusula 8:  
               oscuro(Z) :- cafe(Z).

Se reemplaza la segundo meta en la lista de metas por cafe(X), dando:  
               enorme(oso), cafe(oso). 

(5). Examina el programa buscando empatar cafe(X), encuentra cafe(oso). Esta cláusula no tiene cuerpo, así que la lista de metas se queda vacía. Esto indica una terminación exitosa y la instanciación correspondiente a la variable queda como :  


               X = oso. 



CONCLUSIÓN:

Prolog realiza más trabajo antes de encontrar la respuesta final en la pregunta ?- oscuro( X), enorme( X).




Magdaly M.G.


martes, 27 de mayo de 2014

Ejercicio 2, Capitulo II.

1. ¿ Las siguiente operaciones de matching tienen éxito ó fallan ?
Si tienen éxito, ¿cuáles son las instanciaciones resultantes en las variables?



(a). punto( A, B) = punto( 1, 2).
¡Tuvo éxito!



(b). punto( A, B) = punto( X, Y, Z).
¡No tuvo éxito!



(c). +( 2, 2) = 4.
¡No tuvo éxito!



(d). +( 2, D) = +( E, 2).
¡Tuvo éxito!



(e). triangulo(punto(-1,0),P2,P3) = triangulo(P1,punto(1,0),punto(0,Y)).
¡Tuvo éxito!



2. Usando la representación que se definió anteriormente para segmentos de línea, escriba un término que represente cualquier segmento de línea vertical en x = 5.



3. Asuma que un rectángulo se representa con el término rectángulo( P1, P2, P3, P4) donde P1,P2,P3,P4 son los vértices del rectángulo ordenado positivamente. Defina la relación regular( R) que es verdad (true) si R es un rectángulo cuyos lados son vertical y horizontal.




Magdaly M.G.

lunes, 19 de mayo de 2014

Ejercicio 1 Capitulo 2

Sugiera una representación para rectángulos, cuadrados y círculos como objetos Prolog estructurados. Escriba algunos ejemplos que representen objetos físicos concretos utilizando la representación que sugirió. 


Prolog, ejercicio 1.7

1.7. Trate de entender como Prolog deriva respuestas a las siguientes preguntas, usando el programa
familiar. Dibuje también los diagramas de derivación correspondientes. Identifique los bactrakings que se encuentre:

DIAGRAMA








a). ?- progenitor( pamela, roberto). 



b). ?- madre( pamela, roberto). 



c). ?- abuelo( pamela, ana). 


d). ?- abuela(roberto, jaime). 




Entendiendo Prolog

1.3. Traduzca las siguientes sentencias a reglas Prolog.
a). Cualquiera que tiene un hijo es feliz (introduzca la relación unaria llamada 'feliz').
b). Para todo X, si X tiene un hijo que tiene una hermana, entonces X tiene dos hijos (introduzca la relación tiene-dos-hijos). 


















1.4. Defina la relación 'nieto' usando la relación 'progenitor'. Recomendación: Será similar a la relación abuelo.

nieto( X, Z) :- progenitor( Y, X) , progenitor( Z, Y).

1.5. Defina la relación tia( X, Y) en términos de las relaciones 'progenitor' y 'hermana'. Dibuje primero un diagrama para ésta relación.



tía (X,Y) :- hermana(X,Z), progenitor(Z,Y).


1.6. Considere la siguiente definición alternativa de predecesor:

 predecesor( X, Z) :- progenitor( X, Z).
 predecesor( X, Z) :- progenitor( Y, Z) , predecesor( X, Y).
¿es apropiada esta definición?

La primera definición no es apropiada.
La segunda definición si es apropiada.

¿puede usted dibujar un diagrama que corresponda con  esta definición?






martes, 13 de mayo de 2014

Prolog ejercicio 1

Ejercicios.




1. Asumiendo las relaciones definidas en el ejemplo, ¿qué contestará Prolog a las
 siguientes preguntas?
a). ?- progenitor( jaime, X).

b). ?- progenitor( X, jaime).

c). ?- progenitor( pamela, X), progenitor( X, patricia).

d). ?- progenitor( pamela, X), progenitor( X, Y), progenitor(Y,jaime).



2. Formule en Prolog las siguientes preguntas acerca de la relación progenitor:

a). ¿ cómo se llama el progenitor de patricia ?


b). ¿ tiene elizabeth algún hijo ?



c). ¿ cómo se llama el abuelo de patricia ?


sábado, 3 de mayo de 2014

Como instalar SWI-Prolog

¿Que es Prolog?

Prolog es un lenguaje de programación lógica cuya primera versión fue desarrollada a principios de la década de 1970 por Colmerauer en la universidad de Marsella. Contrariamente a otros lenguajes de programación basados es estructuras de control y definición de funciones para calcular resultados, Prolog está orientado a la especificación de relaciones para responder consultas. En ese sentido Prolog es similar a un sistema de base de datos, aunque en el contexto de la inteligencia artificial se prefiere hablar de bases de conocimiento, enfatizando la complejidad estructural de los datos y de las deducciones que se pueden obtener de ellos.


Como instalar Prolog en Windows,a continuación los pasos para ello.

Paso 1.
Buscaremos el programa en la pagina de Prolog, para ello accedemos a nuestro navegador y en la barra de búsqueda de Google escribiremos SWI prolog. Y damos clic en el primer resultado. www.swi-prolog.org/




Paso 2.
Damos clic en Download SWI-Prolog



Paso 3.
Después damos clic en Stable release, que son las fuentes ejecutables en Windows.



Paso 4.
Elegimos según nuestro sistema operativo en mi caso sera:


Automáticamente se descargara el programa al hacer clic, una vez terminada la descarga damos clic en el.


Paso 4.

Nos aparecerá un recuadro, le daremos clic en Si para empezar con la instalación.


Paso 5.











Y listo se ha instalado Prolog con éxito.