En este grupo En todos

Foro de Prolog



ayuda con prolog

Sebastián
Informatica uca
Escrito por Sebastián Amaya
el 09/01/2011

Hola les comento que soy nuevo en este lenguaje y queria saber si alguien me puede decir como hago lo sig: estoy haciendo un ejercicio de arbol genealogico y quiero poner en la consulta un nombre y que me diga si es familiar o no... Lo estoy haciendo con recursividad y el problema esta en la linea que esta comentada por favor ayudenme... Muchas gracias

Progenitor(fabian,zenon).
progenitor(dora,zenon).
progenitor(german,tita).
progenitor(braulia,tita).

progenitor(americo,silvio).
progenitor(aiello,silvio).
progenitor(jaime,elsa).
progenitor(florinda,elsa).

progenitor(zenon,julio).
progenitor(tita,julio).

progenitor(silvio,elena).
progenitor(elsa,elena).

progenitor(julio,sebastian).
progenitor(elena,sebastian).

progenitor(sebastian,bautista).
progenitor(angeles,bautista).


miembro([fabian,zenon,dora,german,tita,braulia,americo,silvio,aiello,jaime,elsa,florinda,julio,elena,sebastian,angeles,bautista]).

familiar(X):-miembro([X|_]).
%%%%familiar(X):-miembro([_|R]),familiar(X).

Luis Miguel Alvarez
Bachillerato inem felipe pérez
Escrito por Luis Miguel Alvarez
el 27/01/2011

No tienes que complicarte con esa lista
Mejor solo utiliza esto:

-----------------------code---------------------

progenitor(fabian,zenon).
progenitor(dora,zenon).
progenitor(german,tita).
progenitor(braulia,tita).
progenitor(americo,silvio).
progenitor(aiello,silvio).
progenitor(jaime,elsa).
progenitor(florinda,elsa).
progenitor(zenon,julio).
progenitor(tita,julio).
progenitor(silvio,elena).
progenitor(elsa,elena).
progenitor(julio,sebastian).
progenitor(elena,sebastian).
progenitor(sebastian,bautista).
progenitor(angeles,bautista).
familiar(X):- progenitor(X,_);progenitor(_,X).

-----------------------code---------------------

Asi solo tienes que poner mas hechos progenitor(sin tener que actualizar tambien la lista miembro).

Salu2

Luis Miguel Alvarez
Bachillerato inem felipe pérez
Escrito por Luis Miguel Alvarez
el 27/01/2011

Aunque si lo deseas tambien se puede hacer con solo la lista y el predicado member que tiene prolog.

-----------------------code---------------------

familiar(X):-member(X,[fabian,zenon,dora,german,tita,braulia,americo,silvio,aiello,jaime,elsa,florinda,julio,elena,sebastian,angeles,bautista]).

-----------------------code---------------------


Salu2

Sebastián Amaya
Informatica uca
Escrito por Sebastián Amaya
el 28/01/2011

Muchisimas gracias me sirve un monton de verdad gracias por ayudarme Luis esta muy buena la forma que me propones de hacer el programa gracias!

Luis Miguel Alvarez
Bachillerato inem felipe pérez
Escrito por Luis Miguel Alvarez
el 28/01/2011

De nada, para eso estamos, para ayudar(aunque este foro esta un poco apagado) y mas siendo un lenguaje poco conocido.

Te dejo un ejercicio que desarrollé en la Universidad cuando estaba viendo el paradigma logico.
Es el arbol genealogico del libro Cien años de Soledad de Gabriel García Márquez (lo puedes encontrar en https://upload.wikimedia.org/wikipedia/commons/9/99/Buendia. Gif )
-----------------------code---------------------

hijo(jose_arcadio,jose_arcadio_buendia). Hijo(jose_arcadio,ursula_iguaran).
hijo(aureliano,jose_arcadio_buendia). Hijo(aureliano,ursula_iguaran).
hijo(amaranta,jose_arcadio_buendia). Hijo(amaranta,ursula_iguaran).

Hijo(arcadio,jose_arcadio). Hijo(arcadio,pilar_temera).
hijo(aureliano_jose,aureliano). Hijo(aureliano_jose,pilar_temera).
hijo(aurelianos_17,aureliano).

Hijo(remedios,santa_sofia_de_la_piedad). Hijo(remedios,arcadio).
hijo(jose_arcadio_segundo,santa_sofia_de_la_piedad). Hijo(jose_arcadio_segundo,arcadio).
hijo(aureliano_segundo,santa_sofia_de_la_piedad). Hijo(aureliano_segundo,arcadio).

Hijo(amaranta_ursula,aureliano_segundo). Hijo(amaranta_ursula,fernanda_del_carpio).
hijo(jose_arcadio_segundo,aureliano_segundo). Hijo(jose_arcadio_segundo,fernanda_del_carpio).
hijo(renata_remedios,aureliano_segundo). Hijo(renata_remedios,fernanda_del_carpio).

Hijo(aureliano_babilonia,renata_remedios). Hijo(aureliano_babilonia,mauricio_babilonia).

Hijo(aureliano,aureliano_babilonia). Hijo(aureliano,amaranta_ursula).

Desendiente(X,Y):-hijo(X,Y).
desendiente(X,Y):-hijo(X,Z),desendiente(Z,Y).

Padre(X,Y):-hijo(Y,X).
hermano(X,Y):-padre(Z,X),hijo(Y,Z).
tio(X,Y):-padre(Z,Y),hermano(X,Z).
primo(X,Y):-tio(Z,X),padre(Z,Y).

Nieto(X,Y):-hijo(X,Z),hijo(Z,Y).
bisnieto(X,Y):-hijo(X,Z),nieto(Z,Y).
tataranieto(X,Y):-hijo(X,Z),bisnieto(Z,Y).

Abuelo(X,Y):-nieto(Y,X).
bisabuelo(X,Y):-bisnieto(Y,X).
tatarabuelo(X,Y):-tatarnieto(Y,X).

-----------------------code---------------------
Tienes casi todas las relaciones familiares.
Se pueden usar de 2 maneras, confirmar un parentesco, se utiliza por Ejemplo: abuelo(jose_arcadio_buendia,arcadio). Para saber si Jose acadio es abuelo de arcadio(true)
Ó tambien se puede preguntar por cuales son los abuelos de arcadio por ejemplo: abuelo(X,arcadio). Y responderá Jose arcadio y Ursula.
Nota: para mostrar todos los resultados presiona ";"(punto y coma)
Edit - Nota2: obviamente todo debe de estar en minuscula para evitar confusiones(menos las variables).
-
Salu2

Sebastián Amaya
Informatica uca
Escrito por Sebastián Amaya
el 29/01/2011

Gracias luis todo ayuda...... Saludos

Mar Mar
La Habana, Cuba
Escrito por Mar Mar
el 03/03/2011

Chicos tengo un programa implementado en prolog que busca aleatoriamente árboles con altos valores de verdad. Necesito implementarlo en VIsual prolog para que el usuario pueda interactuar de forma simple con el y entrarle unos datos etc.

Alguno de ustedes me puede facilitar un buen manual, tutoria o video tutorial de visual prolog, pienso utilizar la versión 7.3.

Saludos

Luis Miguel Alvarez
Bachillerato inem felipe pérez
Escrito por Luis Miguel Alvarez
el 09/03/2011

No habia podido responder, pero Mar Mar no te entiendo bien, si puedes ampliar la informacion seria mas facil, ya que la informacion que dejaste es muy ambigua.
-
Salu2

Sebastián Amaya
Informatica uca
Escrito por Sebastián Amaya
el 10/03/2011

Hola Luis te comento que aprobe Programacion 1 en parte gracias a tu ayuda... Muchisimas gracias me ayudaste muchisimo y solo queria comentarte eso y Mar Mar describi mejor el problema asi t podemos ayudar yo no soy muy bueno en prolog pero si se algo te lo digo.