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.




Feedly

¿Que es feedly?

Feedly es una herramienta muy eficaz para ahorrar tiempo y tener organizado los contenidos que tengan un interés y utilidad para ti. Lo maravilloso de esta herramienta es que es muy sencilla de usar. En página principal tienes acceso directo a todas las fuentes de contenidos gracias a la tecnología RSS.

Como crear una cuenta en feedly.

PASO 1.


PASO 2.


PASO 3.

Para crear nuestra cuenta podemos registrarnos con nuestro facebook, twitter, correo de hotmail o gmail.

PASO 4.

Ingresamos nuestro correo electrónico y contraseña.



PASO 5.


Dar clic en si para que la aplicación tenga a acceso a nuestra información básica.





PASO 6.




PASO 7.


Nos aparecerá información sobre el tema de nuestro interés. Damos clic en la entrada de nuestro intereses.


PASO 8.

Para seguir la pagina daremos clic en +feedly, y así leer sus contenidos.




PASO 9.

Después clic en add.



Y así podemos ir agregando paginas de nuestro intereses y leerlas de manera mas ordenada y rápida.