Bueno, el lunes fuí al primera clase de taller para introducción a los algoritmos y nos comentaron que vamos a empezar a pensar y renegar con programación lógica…
Fue ahí cuando nos nombraron PROLOG !!
Y de la serie de ejercicios que nos dieron para resolver ese día, el último era el que tenía ese gustito especial de “complicado” en la lista de ejercicios según Araceli(dra en algo seguro..).
Para el que quiera probar en linux, puede instalar desde su manejador de paquetes, el llamado “swipl” para bajar el intérprete de Prolog, luego vamos a alguna terminal, escribimos “swipl” o “pl” según versión y ya pueden comenzar a renegar con nosotros..
Y así fue como nos pusimos a resolver el problema…
El que quiera ponerse a leer lo que fue el primer taller, puede hacerlo desde: http://www.cs.famaf.unc.edu.ar/wiki/doku.php?id=introalg:taller09_1
El problema dice:
-
Expresen en reglas las relaciones entre los miembros de la familia que describimos aquí mediante hechos:
mujer(pepa).
mujer(lucía).
mujer(blanca).
mujer(rosa).
mujer(alba).
mujer(inés).
mujer(irene).
hombre(armando).
hombre(julián).
hombre(esteban).
hombre(mario).
hombre(alejandro).
hombre(martín).
hombre(matías).
progenitor(pepa,lucía).
progenitor(pepa,blanca).
progenitor(pepa,mario).
progenitor(lucía,rosa).
progenitor(lucía,alba).
progenitor(blanca,inés).
progenitor(blanca,martín).
progenitor(irene,matías).
progenitor(armando,lucía).
progenitor(armando,blanca).
progenitor(armando,mario).
progenitor(julián,rosa).
progenitor(julián,alba).
progenitor(alejandro,inés).
progenitor(alejandro,martín).
progenitor(mario,matías).
Escriban reglas para expresar las relaciones: padre, madre, abuelo, abuela, hermano, hermana, tío, tía, primo, prima y también hijo único.
Y hasta ahora hemos resuelto todo, menos el que muestra a único Hijo Único, que es Matías si mal no recuerdo…
Nuestra resolución(para el que quiera ponerse a hacerlo y luego ver diferencias, etc) es:
padre(X,Y) :- hombre(X), progenitor(X,Y).
madre(X,Y) :- mujer(X), progenitor(X,Y).
abuelo(X,Y,Z) :- padre(X,Y), progenitor(Y,Z).
abuela(X,Y,Z) :- madre(X,Y), progenitor(Y,Z).
hermano(W,X,Y,Z) :- padre(W,Y), madre(X,Y), padre(W,Z), madre(X,Z), hombre(Y), Y\==Z.
hermana(W,X,Y,Z) :- padre(W,Y), madre(X,Y), padre(W,Z), madre(X,Z), mujer(Y), Y\==Z.
tio(X,Y) :- hermano(A,B,X,Z), progenitor(Z,Y).
tia(X,Y) :- hermana(A,B,X,Z), progenitor(Z,Y).
primo(A,B) :- padre(W,Y), madre(X,Y), padre(W,Z), madre(X,Z), progenitor(Y,A), progenitor(Z,B), hombre(A), padre(W,Y)\==padre(W,Z),madre(X,Y)\==madre(X,Z).
prima(A,B) :- padre(W,Y), madre(X,Y), padre(W,Z), madre(X,Z), progenitor(Y,A), progenitor(Z,B), mujer(A), padre(W,Y)\==padre(W,Z),madre(X,Y)\==madre(X,Z).
Obviamente se puede optimizar un poco…
Saludos a todos, a Alternaria.tv en especial, un excelente podcast que sigo de hace un buen rato, se los recomiendo… Es todo por hoy amigos..
Comentarios recientes