Técnicas avanzadas de Programación
Programación y prácticas en Prolog
Prolog presentado en Prezi
Prolog y sus funciones
Historia de la Progrmación Lógica
martes, 19 de marzo de 2013
domingo, 3 de marzo de 2013
Ejercicios 1
Vamos a Realizar los ejercicios que se encuentran en el archivo Prolog estos temas a tratar son del curso que llevamos sobre Programación Lógica.
Los primeros ejercicios son:
1. Asumiendo las relaciones definidas en el ejemplo, ¿qué contestará Prolog a las
siguientes preguntas?
Primero que nada sabemos que para que este nos funciones debemos declarar las clausalas para estos ejercicios es suficiente con declarar las clausulas de progenitor.
Ahora le hacemos la pregunta y el resultado es false.
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).
Bueno para no meter tantas imagenes solo saco una haciendo las cuatro consultas requeridas.
2. Formule en Prolog las siguientes preguntas acerca de la relación progenitor:
a). ¿ cómo se llama el progenitor de patricia ?
?- progenitor(X,patricia).
b). ¿ tiene elizabeth algún hijo ?
?- progrenitor(elizabeth,X).
c). ¿ cómo se llama el abuelo de patricia ?
?- progenitor(roberto,patricia), progenitor(X,roberto).
Segundos ejercicios.
1.3. Traduzca las siguientes sentencias a reglas Prolog.
a). Cualquiera que tiene un hijo es feliz (introduzca la relación unaria llamada 'feliz').
Para todo X y Y
X es feliz, si X es progenitor de Y.
en Prolog:
feliz(X):- progenitor(X,Y).
Añadimos la clausula feliz.
Después hacemos la pregunta de quienes son felices.
Las veces que se repiten los nombres son la cantidad de hijos que tienen.
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).
Para todo X y Y.
X progenitor de Y, Y hermana de Z,
entonces X tiene dos hijos.
en prolog:
tiene-dos-hijos(X):- progenitor(X,Y), progenitor(X,Z).
Añadimos la clausula tiene-dos-hijos
1.4. Defina la relación 'nieto' usando la relación 'progenitor'.
Para todo X,Y,Z.
Z es progenitor de Y, Y es progenitor X,
entonces X es nieto de Z.
En prolog:
nieto(X,Z):- progenitor(Z,Y), progenitor(Y,X).
Recomendación: Será similar a la relación abuelo.
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.
Para todo X,Y
X es tia de Y, si X es hermana de Z,
Z es progenitor de Y y X es mujer.
En prolog:
tia(X,Y):- hernana(X,Z), progenitor(Z,Y), mujer(X).
Ahora la pregunta.
1.6. Considere la siguiente definición alternativa de predecesor:
Este ejercicio se sigue de
Primera regla.
Para todo X y Z,
X es predecesor de Z si
X es progenitor de Z.
en Prolog:
predecesor( X, Z) :- progenitor( X, Z).
Segunda regla.
Para todo X y Z,
X es predecesor de Z si
existe algun Y tal que
(1) X es progenitor de Y y
(2) Y es predecesor de Z.
en Prolog :
predecesor( X, Z) :- progenitor( X, Y) ,
predecesor( Y, Z).
Ahora queremos saber si
(Primera regla) predecesor( X, Z) :- progenitor( X, Z).
(Segunda regla) predecesor( X, Z) :- progenitor( Y, Z) , predecesor( X, Y).
¿Es apropiada esta definición?
Añadimos primera y segunda regla.
Respuesta: Si
¿Puede usted dibujar un diagrama que corresponda con
esta definición?
Primero si X es predecesor de Z es verdadero, por lo consiguiente X es progenitor de Z.
Segundo Y es progenitor de Z, entonces Y es predecesor de Z.
Tercero X es predecesor de Y, entonces X es progenitor de Y.
Por lo tanto existe la relacion de que X es predecesor de Z, pero no es progenitor de Z. es como si existiera la relacion padre y abuelo donde ellos son los predecesores.
Los primeros ejercicios son:
1. Asumiendo las relaciones definidas en el ejemplo, ¿qué contestará Prolog a las
siguientes preguntas?
Primero que nada sabemos que para que este nos funciones debemos declarar las clausalas para estos ejercicios es suficiente con declarar las clausulas de progenitor.

Ahora le hacemos la pregunta y el resultado es false.
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).
Bueno para no meter tantas imagenes solo saco una haciendo las cuatro consultas requeridas.
2. Formule en Prolog las siguientes preguntas acerca de la relación progenitor:
a). ¿ cómo se llama el progenitor de patricia ?
?- progenitor(X,patricia).
b). ¿ tiene elizabeth algún hijo ?
?- progrenitor(elizabeth,X).
c). ¿ cómo se llama el abuelo de patricia ?
?- progenitor(roberto,patricia), progenitor(X,roberto).
Segundos ejercicios.
1.3. Traduzca las siguientes sentencias a reglas Prolog.
a). Cualquiera que tiene un hijo es feliz (introduzca la relación unaria llamada 'feliz').
Para todo X y Y
X es feliz, si X es progenitor de Y.
en Prolog:
feliz(X):- progenitor(X,Y).
Añadimos la clausula feliz.
Después hacemos la pregunta de quienes son felices.
Las veces que se repiten los nombres son la cantidad de hijos que tienen.
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).
Para todo X y Y.
X progenitor de Y, Y hermana de Z,
entonces X tiene dos hijos.
en prolog:
tiene-dos-hijos(X):- progenitor(X,Y), progenitor(X,Z).
Añadimos la clausula tiene-dos-hijos
1.4. Defina la relación 'nieto' usando la relación 'progenitor'.
Para todo X,Y,Z.
Z es progenitor de Y, Y es progenitor X,
entonces X es nieto de Z.
En prolog:
nieto(X,Z):- progenitor(Z,Y), progenitor(Y,X).
Recomendación: Será similar a la relación abuelo.
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.
Para todo X,Y
X es tia de Y, si X es hermana de Z,
Z es progenitor de Y y X es mujer.
En prolog:
tia(X,Y):- hernana(X,Z), progenitor(Z,Y), mujer(X).
Ahora la pregunta.
1.6. Considere la siguiente definición alternativa de predecesor:
Este ejercicio se sigue de
Primera regla.
Para todo X y Z,
X es predecesor de Z si
X es progenitor de Z.
en Prolog:
predecesor( X, Z) :- progenitor( X, Z).
Segunda regla.
Para todo X y Z,
X es predecesor de Z si
existe algun Y tal que
(1) X es progenitor de Y y
(2) Y es predecesor de Z.
en Prolog :
predecesor( X, Z) :- progenitor( X, Y) ,
predecesor( Y, Z).
Ahora queremos saber si
(Primera regla) predecesor( X, Z) :- progenitor( X, Z).
(Segunda regla) predecesor( X, Z) :- progenitor( Y, Z) , predecesor( X, Y).
¿Es apropiada esta definición?
Añadimos primera y segunda regla.
Respuesta: Si
¿Puede usted dibujar un diagrama que corresponda con
esta definición?
Primero si X es predecesor de Z es verdadero, por lo consiguiente X es progenitor de Z.
Segundo Y es progenitor de Z, entonces Y es predecesor de Z.
Tercero X es predecesor de Y, entonces X es progenitor de Y.
Por lo tanto existe la relacion de que X es predecesor de Z, pero no es progenitor de Z. es como si existiera la relacion padre y abuelo donde ellos son los predecesores.
Material de apoyo Programación Lógica (Prolog)
Para aquellos que no cuentan con el material.
Tenemos tres pdf que podiras consultar.
Link de descarga:
-Prolog
-El lenguaje de programación Prolog de M. Teresa Escrig
-Temas Programacion Logica IA
Tenemos tres pdf que podiras consultar.
Link de descarga:
-Prolog
-El lenguaje de programación Prolog de M. Teresa Escrig
-Temas Programacion Logica IA
miércoles, 27 de febrero de 2013
Reto de la semana Arbol Genealógico
/* borraPantalla <- borra="" br="" la="" pantalla="">borraPantalla :- borraLinea(25).
borraLinea(1) :- !,nl.
borraLinea(N) :- nl,N1 is N-1,borraLinea(N1).
?-borraPantalla.
hombre(felipe).
hombre(rodrigo).
hombre(genaro).
hombre(jesus).
hombre(jorge).
hombre(erick).
hombre(antonio).
hombre(yoltzin).
hombre(milton).
hombre(alejandro).
mujer(isabel).
mujer(pina).
mujer(margarita).
mujer(isabel2).
mujer(mariluz).
mujer(maricruz).
mujer(orquidea).
mujer(diana).
mujer(alondra).
mujer(marlen).
mujer(yunnuen).
mujer(yoshandi).
padre(felipe,margarita).
padre(roberto,genaro).
padre(genaro,isabel2).
padre(genaro,jesus).
padre(genaro,mariluz).
padre(genaro,maricruz).
padre(genaro,alejandro).
padre(jesus,antonio).
padre(jesus,diana).
padre(jesus,alondra).
madre(isabel,margarita).
madre(pina,genaro).
madre(margarita,isabel2).
madre(margarita,jesus).
madre(margarita,mariluz).
madre(margarita,maricruz).
madre(margarita,alejandro).
madre(isabel2,orquidea).
madre(isabel2,jorge).
madre(isabel2,erick).
madre(mariluz,yoltzin).
madre(mariluz,milton).
madre(maricruz,marlen).
madre(maricruz,yunnuen).
madre(maricruz,yoshandy).
todalafamilia(X):- hombre(X); mujer(X).
matrimonio(X,Y):- padre(X,Z), madre(Y,Z).
hijo_o_hija(X,Y):- padre(Y,X); madre(Y,X).
hermanos(X,Y):-madre(Z,X),madre(Z,Y).
hermano(X,Y):-hombre(X),hombre(Y),hermanos(Y,X).
hermana(X,Y):- mujer(X),mujer(Y), hermanos(X,Y).
tio_o_tia(X,Y):- hijo_o_hija(Y,Z),hermanos(X,Z).
->
borraLinea(1) :- !,nl.
borraLinea(N) :- nl,N1 is N-1,borraLinea(N1).
?-borraPantalla.
hombre(felipe).
hombre(rodrigo).
hombre(genaro).
hombre(jesus).
hombre(jorge).
hombre(erick).
hombre(antonio).
hombre(yoltzin).
hombre(milton).
hombre(alejandro).
mujer(isabel).
mujer(pina).
mujer(margarita).
mujer(isabel2).
mujer(mariluz).
mujer(maricruz).
mujer(orquidea).
mujer(diana).
mujer(alondra).
mujer(marlen).
mujer(yunnuen).
mujer(yoshandi).
padre(felipe,margarita).
padre(roberto,genaro).
padre(genaro,isabel2).
padre(genaro,jesus).
padre(genaro,mariluz).
padre(genaro,maricruz).
padre(genaro,alejandro).
padre(jesus,antonio).
padre(jesus,diana).
padre(jesus,alondra).
madre(isabel,margarita).
madre(pina,genaro).
madre(margarita,isabel2).
madre(margarita,jesus).
madre(margarita,mariluz).
madre(margarita,maricruz).
madre(margarita,alejandro).
madre(isabel2,orquidea).
madre(isabel2,jorge).
madre(isabel2,erick).
madre(mariluz,yoltzin).
madre(mariluz,milton).
madre(maricruz,marlen).
madre(maricruz,yunnuen).
madre(maricruz,yoshandy).
todalafamilia(X):- hombre(X); mujer(X).
matrimonio(X,Y):- padre(X,Z), madre(Y,Z).
hijo_o_hija(X,Y):- padre(Y,X); madre(Y,X).
hermanos(X,Y):-madre(Z,X),madre(Z,Y).
hermano(X,Y):-hombre(X),hombre(Y),hermanos(Y,X).
hermana(X,Y):- mujer(X),mujer(Y), hermanos(X,Y).
tio_o_tia(X,Y):- hijo_o_hija(Y,Z),hermanos(X,Z).
->
jueves, 21 de febrero de 2013
Empezando el curso Prolog
Bueno para empezar ¿qué es Prolog?, prolog es el nombre que se le fue asignado a la programacion lógica, esta programacion empieza más o menos en los 70's por por Alain Colmerauer, esta basada en la logica matemática, la forma de como solucionar problemas en prolog es muy diferente a las otras formas de programar ya que es solo declartativa que quiero decir con esto que vamos a darle al programa las bases para que el trabaje por si solo, declaramos unas lineas y despues hacemos un par de preguntas.
El lenguaje Prolog tiene un mecanismo no muy complejo, podemos desarrollarlo en una hoja de texto y despues compilarlo para eso utilizaremos el programa swi-prolog que se puede descargar de la pagina http://www.swi-prolog.org/ debemos tomar en cuenta el tipo de sistemal operativo al cual es compatible.
Pero una de las cosas importantes para lograr un funcionamineto correcto en Prolog es tomar en cuenta que las clausulas deben tener una secuencia de tres tipos:
a).- Hechos, declaran las cosas que son incondicionalmente ciertas.
Al parecer son las llamadas unarias un ejemplo de ello es:
padre(alejandro). "Esta es la forma declarativa en prolog. Es cierta pues la relacion padre definitivamente solo involucra a alejandro".
b).- Reglas, especifican qué cosas se pueden deducir, si es que se cumplen ciertas
condiciones.
condiciones.
c).- Preguntas, permiten que el usuario pida alguna información derivable de los hechos y
las reglas del programa.
las reglas del programa.
Suscribirse a:
Entradas (Atom)