Trabajo Practico II: Materia

Trabajo Practico II Materia: Lenguajes y Paradigmas de Programacion II Tema: Arbol Genealogico Profesora: Mariela Burg

Views 126 Downloads 9 File size 699KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Trabajo Practico II

Materia: Lenguajes y Paradigmas de Programacion II

Tema: Arbol Genealogico Profesora: Mariela Burghardt Schleicher Leonel UCP | 2018

1

Índice Presentación de las Familias…………………………..............Pág. 3 - 4 Detalles del ejercicio………………………………………………….Pág. 5 Código Fuente del Programa………………………………………Pág. 6-14 Documentación………………………………………………………….Pág. 15-20 Descripción de la Solución………………………………………….Pág. 21 Conclusión………………………………………………………………….Pág. 22 Bibliografía………………………………………………………………….Pág. 23

2

Presentación de las Familias Casa Lannister

3

Casa Stark -- Casa Targaryen

Falta aclarar de la familia Targaryen: Jaehaerys y Shaera son padres de la casa, el esposo de Daenerys (Khal Drogo), y los dragones que son hijos de Daenerys (Viserion, Drogon, Rhaegal). 4

Detalles del ejercicio Este programa de árbol genealógico, permite realizar consultas sobre los parentescos que hay entre 3 familias de la serie JUEGO DE TRONOS. Las familias seleccionadas fueron:  La casa Stark  La casa Targaryen  La casa Lannister Aunque fueron limitadas a un cierto número de generaciones en cada una de ellas debido a que son muy extensas. La casa Stark Comienza con Richard Stark y su esposa Lyarra y va hasta la tercera generación (Rob, Sansa, Arya, Rickon, Bran). La casa Targaryen comienza con Jaehaerys y su esposa Shaera y termnia en la cuarta generación con sus bisnietos (Aegon y Rhaenys). La casa Lannister Comienza con Tywin Lannister y su esposa Joanna, y termina con sus nietos (Tommen, Joffrey y Myrcella). Para saber los parentescos que hay entre cada persona, simplemente hay que realizar consultas (de acuerdo a los hechos y reglas que existen) y el programa responderá true si existe ese tipo de parentesco o de lo contrario responderá false. Para saber cómo realizar las consultas véase la documentación del programa.

5

Código Fuente Del Programa % HECHOS DE LA CASA STARK % Creamos la base de conocimiento de quienes son varones en la familia. esVaron(richard). %Padre de la Casa Stark esVaron(ned). % Hijo de Richard y Lyarra esVaron(brandon). %Hijo de Richard y Lyarra esVaron(benjen). %Hijo Richard y Lyarra esVaron(rob). %Hijo de Ned y Catelyn esVaron(bran). %Hijo de Ned y Catelyn esVaron(rickon). %Hijo de Ned y Catelyn esVaron(jon).

% Base de conocimiento de las mujeres de la familia. esMujer(lyarra). %Madre de la casa Stark esMujer(catelyn). %Esposa de Ned esMujer(sansa). %Hija de Ned y Catelyn esMujer(arya). %Hija de Ned y Catelyn esMujer(lyanna). %Hija de Richard y Lyarra

% Base de conocimiento de los matrimonios de la familia. esConyugueDe(richard, lyarra). esConyugueDe(ned, catelyn).

6

%Base de Conocimiento de los Padres de la familia. esPadreDe(richard, ned). esPadreDe(rihard, brandon). esPadreDe(richard, benjen). esPadreDe(richard, lyanna). esPadreDe(ned, rob). esPadreDe(ned, bran). esPadreDe(ned, rickon). esPadreDe(ned, arya). esPadreDe(ned, sansa).

%Base de conocimiento de las Madres de la familia esMadreDe(lyanna, jon). %lyanna tiene un hijo sin estar casada esMadreDe(catelyn, rob). esMadreDe(catelyn, arya). esMadreDe(catelyn, sansa). esMadreDe(catelyn, bran). esMadreDe(catelyn, rickon). esMadreDe(lyarra, ned). esMadreDe(lyarra, brandon). esMadreDe(lyarra, benjen). esMadreDe(lyarra, lyanna).

7

% HECHOS DE LA CASA TARGARYEN % Declaramos la base de conocimiento de los varones de la familia. esVaron(jaehaerys).% Padre de la casa Targaryen esVaron(aerysII). % Hijo de jaehaerys esVaron(rhaegar). % Hijo de AerysII y Rhaella esVaron(viserys).%Hijo de AerysII y Rhaella esVaron(jon). %Hijo de Rhaegar y Lyanna Stark esVaron(aegon). %Hijo de Rhaegar y Elia Martell esVaron(khalDrogo). %esposo de daenerys

% Declaramos la base de conocimiento de las mujeres de la familia. esMujer(shaera). %Madre de la casa Targaryen esMujer(rhaella). % Esposa de AerysII esMujer(eliaMartell). %Esposa de Rhaegar esMujer(daenerys). %Hija de AerysII y Rhaella esMujer(rhaenys). %Hija de Rhaegar y Elia Martell

%Base de conocimiento de los dragones esDragon(rhaegal). esDragon(viserion). esDragon(drogon).

8

% Base de conocimiento de los matrimonios de la familia. esConyugueDe(jaehaerys, shaera). esConyugueDe(aerysII, rhaella). esConyugueDe(rhaegar, eliaMartell). esConyugueDe(khalDrogo, daenerys).

%Base de conocimiento de los padres esPadreDe(jaehaerys, aerysII). esPadreDe(aerysII, rhaegar). esPadreDe(aerysII, viserys). esPadreDe(aerysII, daenerys). esPadreDe(rhaegar, jon). esPadreDe(rhaegar, aegon). esPadreDe(rhaegar, rhaenys).

%Base de conocimiento de las madres esMadreDe(shaera, aerysII). esMadreDe(rhaella, viserys). esMadreDe(rhaella, daenerys). esMadreDe(rhaella, rhaegar). esMadreDe(eliaMartell, aegon). esMadreDe(eliaMartell, rhaenys). esMadreDe(daenerys, viserion).

9

esMadreDe(daenerys, drogon). esMadreDe(daenerys, rhaegal).

%HECHOS DE LA CASA LANNISTER esVaron(tywin). %Padre de la Casa Lannister esVaron(jaime). % Hijo de tywin y joanna esVaron(tyrion). %Hijo de tywin y joanna esVaron(joffrey). %Hijo jaime y cersei esVaron(tommen). %Hijo de jaime y cersei esVaron(baratheon). % Esposo de cersei

% Base de conocimiento de las mujeres de la familia. esMujer(joanna). %Madre de la casa Lannister esMujer(cersei). %Hija de tywin y joanna esMujer(myrcella). %Hija jaime y cersei

% Base de conocimiento de los matrimonios de la familia. esConyugueDe(tywin, joanna). esConyugueDe(baratheon, cersei).

%Base de Conocimiento de los Padres de la familia. esPadreDe(tywin, jaime). esPadreDe(tywin, tyrion).

10

esPadreDe(tywin, cersei). esPadreDe(jaime, tommen). esPadreDe(jaime, joffrey). esPadreDe(jaime, myrcella).

%Base de conocimiento de las Madres de la familia esMadreDe(joanna, jaime). esMadreDe(joanna, cersei). esMadreDe(joanna, tyrion). esMadreDe(cersei, tommen). esMadreDe(cersei, joffrey). esMadreDe(cersei, myrcella).

%REGLAS PARA TODAS LAS FAMILIAS

% Abuelos de la Familia: Para decir que alguien es abuelo/a, decimos que % ese abuelo/a es padre o madre de algun hijo/a, y a su vez este hijo/a % es padre de otro hijo/a. esAbueloDe(Abuelo, Nietx):- esPadreDe(Abuelo, Padre), esPadreDe(Padre,Nietx), esVaron(Abuelo). esAbueloDe(Abuelo, Nietx):- esMadreDe(Madre, Nietx), esPadreDe(Abuelo, Madre), esVaron(Abuelo). esAbuelaDe(Abuela, Nietx):- esPadreDe(Padre,Nietx), esMadreDe(Abuela, Padre), esMujer(Abuela).

11

esAbuelaDe(Abuela, Nietx):- esMadreDe(Madre, Nietx), esMadreDe(Abuela, Madre), esMujer(Abuela). %Hijos/as esHijoDe(Hijo, PadreMadre):- (esMadreDe(PadreMadre, Hijo) ; esPadreDe(PadreMadre, Hijo)), esVaron(Hijo). esHijaDe(Hija, PadreMadre):- (esMadreDe(PadreMadre, Hija) ; esPadreDe(PadreMadre, Hija)), esMujer(Hija). esHijoDeMatrimonio(Padre, Madre, Hijo):- esPadreDe(Padre, Hijo), esMadreDe(Madre, Hijo), esConyugueDe(Padre, Madre), esVaron(Hijo). esHijaDeMatrimonio(Padre, Madre, Hija):- esPadreDe(Padre, Hija), esMadreDe(Madre, Hija), esConyugueDe(Padre, Madre), esMujer(Hija).

% Hermanastros: Son hemanastros cuando el padre o la madre % son el mismo pero no ambos. Entonces, Cuando un cierto Padre es padre % del hermano1 y a su vez ese mismo Padre es padre del hermano2, % entonces son hermanastros. La misma logica se usa para decir que son % hijos/as de la misma madre. sonHermanastros(Hermano1, Hermano2):- (esPadreDe(Padre, Hermano1), esPadreDe(Padre, Hermano2)) ; (esMadreDe(Madre, Hermano1), esMadreDe(Madre, Hermano2)).

% Hermanos: Son hermanos cuando son hijos del mismo Padre % y de la misma Madre. Entonces, Existe un cierto Padre que es padre del % hermano1 y tambien ese mismo Padre es padre del hermano2, pero a su % vez existe una Madre que es madre del hermano1 y tambien es madre del % hermano2. 12

sonHermanos(Hermano1, Hermano2):- esPadreDe(Padre,Hermano1), esMadreDe(Madre, Hermano2), esPadreDe(Padre, Hermano2), esMadreDe(Madre, Hermano1).

% Tios: Una persona es tio/a cuando este tio/a tiene un hermano/a, y ese % hermano/a es Padre o Madre un hijo/a. esTioDe(Tio, Sobrinx):- (sonHermanos(PadreMadre, Tio), esPadreDe(PadreMadre, Sobrinx)) ; (sonHermanos(Madre, Tio), esMadreDe(Madre, Sobrinx)), esVaron(Tio). esTiaDe(Tia, Sobrinx):- (sonHermanos(PadreMadre, Tia), esPadreDe(PadreMadre, Sobrinx)) ; (sonHermanos(Madre, Tia), esMadreDe(Madre, Sobrinx)), esMujer(Tia).

% BisAbuelo: Cuando un BisAbuelo/a es padre o madre de un Abuelo/a, y % este abuelo/a es abuelo/a de un nieto/a. esBisAbueloDe(BisAbuelo, BisNietx) :- esPadreDe(BisAbuelo, Abuelo), esAbueloDe(Abuelo,BisNietx), esVaron(BisAbuelo). esBisAbueloDe(BisAbuelo, BisNietx) :- esPadreDe(BisAbuelo, Abuela), esAbuelaDe(Abuela,BisNietx), esVaron(BisAbuelo). esBisAbuelaDe(BisAbuela, BisNietx) :- esMadreDe(BisAbuela, Abuela), esAbuelaDe(Abuela,BisNietx), esMujer(BisAbuela). esBisAbuelaDe(BisAbuela, BisNietx) :- esMadreDe(BisAbuela, Abuelo), esAbueloDe(Abuelo,BisNietx), esMujer(BisAbuela).

% PrimoHermanos: Cuando Dos padre/madre son hermanos/as, y el primo/a1 % es hijo/a de uno de esos padre/madre y el primo/a2 es hijo/a del % hermano/a del padre/madre del primo/a1 13

sonPrimoHermanos(Primx1, Primx2):- sonHermanos(PadreMadre1, PadreMadre2), (esHijoDe(Primx1, PadreMadre1), esHijoDe(Primx2,PadreMadre2 )) ; (esHijaDe(Primx1, PadreMadre1), esHijaDe(Primx2, PadreMadre2)) ; (esHijoDe(Primx1,PadreMadre1), esHijaDe(Primx2, PadreMadre2)) ; (esHijaDe(Primx1, PadreMadre1), esHijoDe(Primx2, PadreMadre2)).

% Cuniados: Son cuniados cuando el cuniado/a1 es conyugue de algun % Esposo/a y a su vez este esposo/a es hermano del cuniado/a2. sonCuniados(Cuniado1, Cuniado2):- esConyugueDe(Esposx, Cuniado1) , sonHermanos(Cuniado2, Esposx). sonCuniados(Cuniado1, Cuniado2):- esConyugueDe(Esposx, Cuniado2) , sonHermanos(Cuniado1, Esposx). sonCuniados(Cuniado1, Cuniado2):- esConyugueDe(Cuniado1, Esposx) , sonHermanos(Cuniado2, Esposx). sonCuniados(Cuniado1, Cuniado2):- esConyugueDe(Cuniado2, Esposx) , sonHermanos(Cuniado1, Esposx).

% Suegro: Cuando el Yerno/Nuera es conyugue de un cierto esposo/a, y % cuando el suegro/a es padre/madre de ese esposo/a. esSuegroDe(Suegro, Yerno):- esConyugueDe(Yerno, Esposa), esPadreDe(Suegro, Esposa), esVaron(Suegro), esVaron(Yerno). esSuegroDe(Suegro, Nuera):- esConyugueDe(Esposo, Nuera), esPadreDe(Suegro, Esposo), esVaron(Suegro), esMujer(Nuera). esSuegraDe(Suegra, Yerno):- esConyugueDe(Yerno, Esposa), esMadreDe(Suegra,Esposa), esMujer(Suegra), esVaron(Yerno). esSuegraDe(Suegra, Nuera):- esConyugueDe(Esposo, Nuera), esMadreDe(Suegra,Esposo), esMujer(Suegra), esMujer(Nuera). 14

Documentación Los Hechos Para saber si una persona de la familia es varón o mujer se deben usar estos predicados:  esVaron(Hombre) : Este predicado recibe como sujeto (Hombre) una persona, en el caso de ser varón responderá true, en el caso contrario responderá false. Ejemplo:

 esMujer(Mujer) : Este predicado recibe como sujeto (Mujer) una persona, en el caso de ser mujer responderá true, en el caso contrario responderá false. Ejemplo:

Para conocer si una Persona es Padre o Madre de otra, usamos los siguientes predicados:  esPadreDe(Padre, Hijo/a) : Como primer sujeto (Padre) se debe pasar el nombre del padre, y el segundo sujeto (Hijo/a) debe ser el nombre del hijo o hija. Debe respetarse el orden con el que se ingresan los sujetos. Ejemplo:

 esMadreDe(Madre, Hijo/a) : Como primer sujeto (Madre) se debe pasar el nombre de la madre, y el segundo sujeto (Hijo/a) debe ser el nombre del hijo o hija. Debe respetarse el orden con el que se ingresan los sujetos. Ejemplo:

15

Para conocer los matrimonios de las familias es necesario usar el predicado:  esConyugueDe(Esposo, Esposa) : El primer sujeto debe ser el nombre del esposo, y el segundo sujeto el nombre de la esposa. Tiene que respetarse el orden con el que se ingresan los sujetos. Ejemplo:

Las Reglas Podemos consultar si una persona es hijo o hija de otra persona se usa los siguientes predicados:  esHijoDe(Hijo, PadreOmadre) : A este predicado como primer sujeto se pasa el nombre de un varón, pero como segundo sujeto puede ser tanto el nombre de una mujer como de un hombre. Ejemplo:

 esHijaDe(Hija, PadreOmadre) : A este predicado como primer sujeto se pasa el nombre de una mujer, pero como segundo sujeto puede ser tanto el nombre de una mujer como de un hombre. Ejemplo:

16

Para conocer los abuelos/as de una familia existen los siguientes predicados:  esAbueloDe(Abuelo, nieto/a): El primer sujeto debe ser el nombre de una persona varón, en cambio el segundo sujeto puede ser tanto nombre de varón como de mujer. Ejemplo:

 esAbuelaDe(Abuela, nieto/a) : Este predicado recibe como primer sujeto el nombre de una mujer, y como segundo sujeto puede ser nombre de mujer o de varón. Ejemplo:

Si queremos saber si dos personas son hermanos/as se debe usar un único predicado:  sonHermanos(Hermano1, Hermano2) : Ambos sujetos pueden ser varones, ambos mujeres o mixto. No importa el orden en que se le ingresan los sujetos. Ejemplo:

Para saber si una persona es suegro/a de otra se debe usar el predicado:  esSuegroDe(Suegro, YernoNuera) : El primer sujeto debe ser nombre de varón. El segundo sujeto puede ser de varón o de mujer. Debe 17

respetarse el orden, primero se escribe el nombre del suegro (Suegro) y después el nombre del yerno o nuera (YernoNuera). Ejemplo:

 esSuegraDe(Suegra, YernoNuera) : El primer sujeto debe ser nombre de mujer. El segundo sujeto puede ser de varón o de mujer. Debe respetarse el orden, primero se escribe el nombre de la suegra (Suegra) y después el nombre del yerno o nuera (YernoNuera). Ejemplo:

Para conocer si dos personas son primo hermanos existe el predicado:  sonPrimoHermanos(Primo1, Primo2) : los sujetos pueden ser ambos varones, ambos mujeres o mixto, y no importa el orden con el que se ingresan los sujetos. Ejemplo:

Para conocer los tíos o tías de la familia se deben usar los siguientes predicados:  esTioDe(Tio, Sobrino) : El primer sujeto debe ser nombre de un varón, y el segundo puede ser nombre de varón o mujer, Se debe respetar el orden con el que se ingresan los sujetos. Ejemplo:

18

Para saber quiénes son cuñados usamos el siguiente predicado:  sonCuniados(Cuniado1, Cuniado2): Los sujetos pueden ser ambos varones, ambos mujeres o mixto, y no importa el orden de los sujetos. Ejemplo:

Cuando queremos conocer los bisabuelos de las familias usamos los siguientes predicados:  esBisAbuelo(bisAbuelo, bisNieto/a): El primer sujeto tiene que un varón, mientras que el segundo puede ser varón o mujer. Se debe respetar el orden, primero el bisabuelo y después el bisnieto/a. Ejemplo:

 esBisAbuelaDe(bisAbuela, bisnieto/a ): El primer sujeto debe ser una mujer, el segundo sujeto puede ser tanto mujer como varón. Se debe respetar el orden, primero se debe ingresar la bisabuela y después el bisnieto/a. Ejemplo:

Si quieres saber si una persona es hijo/a de un matrimonio, se debe usar el siguiente predicado:

19

 esHijoDeMatrimonio(Padre, Madre, Hijo/a): El primer sujeto tiene que ser un varón, el segundo una mujer y el tercero tiene que ser un varón. El orden de ingreso de los sujetos debe respetarse. Ejemplo:

 esHijaDeMatrimonio(Padre, Madre, Hija): El primer sujeto tiene que ser un varón, el segundo una mujer y el tercero tiene que ser una mujer. El orden de ingreso de los sujetos debe respetarse. Ejemplo:

Para saber si dos personas comparten padre o madre (pero no ambos), existe el siguiente predicado:  sonHermanastros(Hermano1. Hermano2): Los sujetos pueden ser ambos varones, ambos mujeres o mixto. No importa el orden en que se ingresan los sujetos. Ejemplo:

20

Descripción de la solución Primero que nada existen los hechos sobre quienes son hombre y quienes son mujeres en cada familia, esta base será utilizada para después poder armar las reglas, por ejemplo: esHijoDe(), utiliza como una de las condiciones que sea varón, y esHijaDe(), utiliza que sea mujer. Después hay otros hechos que son de parentescos de primer grado, ellos son: los padres (esPadreDe()), las madres(esMadreDe()), y los conyugues de cada familia (esConyugueDe()). A partir de estos hechos se pudo armar cada una de las reglas, por ejemplo: esHijoDe(), esAbueloDe(), esTioDe(), sonHermanos(), esSuegroDe(), etc. (En la documentación se detalla el resto de las reglas). Pero para poder armar esas reglas si o si fue necesario usar los hechos ya definidos que teníamos anteriormente, o usar reglas formadas por los hechos para poder armar otras reglas, por ejemplo: sonPrimoHermanos(), utiliza las reglas esHijoDe() y sonHermanos, que a su vez estas reglas utilizan los hechos, esPadreDe() o esMadreDe(). Con todos estos hechos y reglas se pueden hacer varios tipos de consultas de parentescos en cada familia, por ejemplo: Ned Stark es padre de Rob Stark? Sansa Stark y Rob Stark son Hermanos? Ned Stark es Abuelo de Sansa Stark? AerysII es conyugues de Rhaella? Tywin Lannister es Abuelo de Joffrey? Jaehaerys es suegro de Rhaella? Daenerys es tía de Aegon? (Para más información vaya a la documentación, donde están todas las consultas con sus ejemplos).

21

Conclusión Programar en el paradigma lógico es muy entretenido y bastante fácil de hacerlo porque es muy intuitivo, ya que cada hecho o regla es resultado de una consecuencia lógica, y al ser tan intuitivo hace que pueda aplicarse a cosas muy reales y cotidianas de la vida como lo es un árbol Genealógico. Aparte, hacer un árbol genealógico en Prolog lo hace aún más sencillo porque proporciona una sintaxis en la que prácticamente todas las reglas son con and y/o or. El ejercicio de hacer un árbol genealógico fue linda experiencia porque las familia es algo que lo tenemos incorporado naturalmente, y poder llevarlo a código y hacer un programa que responda las relaciones familiares fue divertido y emocionante.

22

Bibliografía Link de los Tutoriales de árbol genealógico en prolog: https://www.youtube.com/watch?v=dWLI_-FM42w – Parte1, Sheyla Ruby Zela Quirita. https://www.youtube.com/watch?v=rHpcFuroi_A – Parte 2, Sheyla Ruby Zela Quirita. Link del árbol genealógico de la casa Stark: http://hieloyfuego.wikia.com/wiki/Casa_Stark Link del árbol genealógico de la casa targaryen: http://hieloyfuego.wikia.com/wiki/Casa_Targaryen Link del árbol genealógico de la casa Lannister: http://hieloyfuego.wikia.com/wiki/Casa_Lannister

23