sábado, 6 de noviembre de 2010

Lenguaje Lógico. PROLOG

Lenguajes de Programación - PUNTOS EXTRA

En esta entrada prondré un ejemplo más de un razonamiento en Prolog. El problema dice.

En el árbol genealógico de una familia se tiene lo siguiente. Alejandro es hijo de Patricia y José. Patricia es hija de Celso y Antonia y José es hijo de Adolfo y María; Pedro es hijo de Ana y Juan. Ana es hija de Jorge y Liz y Juan es hijo de Mario y Rosa; Valeria es hija de Carmen y Ernesto. Carmen es hija de Israel y Daniela y Ernesto es hijo de Raúl y Adriana. 

¿Quiénes son los abuelos de Alejandro, Pedro y Valeria?
 

Vamos a analizar este problema.

Los nietos son Alejandro, Pedro y Valeria.
Los padres de Alejandro son Patricia y José.
Los padres de Pedro son Ana y Juan.
Los padres de Valeria son Carmen y Ernesto.
Los padres de Patricia son Celso y Antonia.
Los padres de José son Adolfo y María.
Los padres de Ana son Jorge y Liz.
Los padres de Juan son Mario y Rosa.
Los padres de Carmen son Israel y Daniela.
Los padres de Ernesto son Raul y Adriana.


Para saber quienes son los abuelos de Valeria, Pedro y Alejandro tengan abuelos, se necesita saber quienes son los padres de los padres de Valeria, Pedro y Alejandro.

Entonces sabemos que como Alejandro es hijo de Patricia y José, los padres de Patricia son Celso y Antonia y los de José son Adolfo y María entonces Celso, Antonia, Adolfo y María son los abuelos de Alejandro.

También sabemos que como Pedro es hijo de Juan y Ana, los padres de Juan son Mario y Rosa y los de Ana son Jorge y Liz, entonces Mario, Rosa, Liz y Jorge son los abuelos de Pedro.

Por último sabemos que Valeria es hija de Carmen y Ernesto, los padres de Carmen son Israel y Daniela y los de Ernesto son Raúl y Adriana, entonces Israel, Daniela, Raúl y Adriana son los abuelos de Valeria.


En Prolog

Convirtiendo esto a prolog nos quedaría
                                                                                                          
padre(ernesto, valeria). 
padre(jose, alejandro).
padre(juan, pedro).
padre(raul, ernesto).
padre(adolfo, jose).
padre(mario, juan).
padre(israel, carmen).
padre(celso, patricia).
padre(jorge, ana).
madre(carmen, valeria).
madre(patricia, alejandro).
madre(ana, pedro).
madre(adriana, ernesto).
madre(maria, jose).
madre(rosa, juan).
madre(antonia, patricia).
madre(liz, ana).
madre(daniela, carmen).

En este caso puse en el programa quien era el padre de quién y quien era la madre de quién, por ejemplo madre(carmen, valeria). se traduciría a Carmen es madre de Valeria.

Después para saber los abuelos que tienen declare lo siguiente.

abuelos_paternos(Z,X):- padre(Y,X), padre(Z,Y).
abuelos_paternos(Z,X):- padre(Y,X), madre(Z,Y).


Es abuelo paterno (Z) de (X) persona si y solo sí es el padre (Y) de (X) persona y es el padre(Z) de (Y). Es abuela paterna sí y solo si es el padre (Y) de (X) y es la madre(Z) de (Y).

abuelos_maternos(Z,X):- madre(Y,X), padre(Z,Y).
abuelos_maternos(Z,X):- madre(Y,X), madre(Z,Y).

Es abuelo materno(Z) de (X) persona si y solo sí es la madre (Y) de (X) persona y es el padre(Z) de (Y). Es abuela materna (Z) de (X) persona sí y sólo si es la madre(Y) de (X) persona y es la madre(Z) de (Y).





Entonces el programa completo quedaría



padre(ernesto, valeria).
padre(jose, alejandro).
padre(juan, pedro).
padre(raul, ernesto).
padre(adolfo, jose).
padre(mario, juan).
padre(israel, carmen).
padre(celso, patricia).
padre(jorge, ana).
madre(carmen, valeria).
madre(patricia, alejandro).
madre(ana, pedro).
madre(adriana, ernesto).
madre(maria, jose).
madre(rosa, juan).
madre(antonia, patricia).
madre(liz, ana).
madre(daniela, carmen).

abuelos_paternos(Z,X):- padre(Y,X), padre(Z,Y).
abuelos_paternos(Z,X):- padre(Y,X), madre(Z,Y).

abuelos_maternos(Z,X):- madre(Y,X), padre(Z,Y). 
abuelos_maternos(Z,X):- madre(Y,X), madre(Z,Y).



Ahora les mostraré la ejecución de este programa con algunas preguntas que realicé en cuanto a quiénes son los abuelos de Valeria, Pedro y Alejandro.








Como podrán ver los abuelos paternos de Valeria son Raúl y Adriana. Los abuelos maternos de Pedro son Jorge y Liz y los abuelos paternos de Alejandro son Adolfo y María.

Con esto concluyo esta entrada, espero les haya servido de algo. Si tienen alguna pregunta, no duden en poner un comentario. Saludos:)

1 comentario: