problema de la isla logica
Publicado por Mariano Jorge Rossin (2 intervenciones) el 20/10/2005 06:35:33
hola, queria saber si alguien tiene programado en prolog como se resolveria el problema de la isla logica que detallo a continuacion, si alguien lo tiene, porfavor enviemelo a [email protected] yo voy a estar muy agradecido, muchas gracias a todos, chau chau
% Problema de la Isla Logica
% En una isla existen tres tipos de habitantes: dioses, demonios y humanos.
% Los dioses siempre dicen la verdad, los demonios siempre mienten y los
% humanos dicen la verdad por el dia y mienten por la noche.
% Escribir un programa que a partir de las conversaciones de los habitantes
% intente deducir de que tipo son y si es de dia o de noche.
% Los unicos enunciados posibles son del tipo:
% A es (divino|humano|demonio)
% es (dia|noche)
% Ejemplos de conversaciones:
% A: A es demonio.
conversacion1(Dia,A):-
dice(A,A,demonio,Dia).
% A: B es humano.
% B: A es demonio.
% A: B es demonio.
conversacion2(Dia,A,B):-
dice(A,B,humano,Dia),
dice(B,A,demonio,Dia),
dice(A,B,demonio,Dia).
% tipos de habitantes.
tipo(dios).
tipo(demonio).
tipo(humano).
opuesto(dia, noche).
opuesto(noche, dia).
% X dice Y es (divino|humano|demonio)
% dice(X, Y, (divino|humano|demonio), Dia)
dice(demonio,Y,Tipo,_):-
tipo(Y),
Y \== Tipo.
dice(dios, Tipo, Tipo,_).
dice(humano, Y, Tipo, noche):-
tipo(Y),
Y \== Tipo.
dice(humano, Tipo, Tipo, dia).
% X dice es (dia|noche)
% dice(X, (dia|noche), Dia )
dice(demonio, Dia, DiaV):-
opuesto(Dia, DiaV).
dice(dios, Dia, Dia).
% Si un humano dice que es de dia, no se deduce nada. Si dice que es de
% noche, es absurdo.
dice(humano, dia, _).
% NOTA: El programa se puede ampliar para admitir enunciados del tipo:
% A no es (divino|humano|demonio)
% A (miente|dice la verdad)
% A no (miente|dice la verdad)
% Otra ampliacion posible es incluir una gramatica para poder escribir
% las frases directamente.
% Problema de la Isla Logica
% En una isla existen tres tipos de habitantes: dioses, demonios y humanos.
% Los dioses siempre dicen la verdad, los demonios siempre mienten y los
% humanos dicen la verdad por el dia y mienten por la noche.
% Escribir un programa que a partir de las conversaciones de los habitantes
% intente deducir de que tipo son y si es de dia o de noche.
% Los unicos enunciados posibles son del tipo:
% A es (divino|humano|demonio)
% es (dia|noche)
% Ejemplos de conversaciones:
% A: A es demonio.
conversacion1(Dia,A):-
dice(A,A,demonio,Dia).
% A: B es humano.
% B: A es demonio.
% A: B es demonio.
conversacion2(Dia,A,B):-
dice(A,B,humano,Dia),
dice(B,A,demonio,Dia),
dice(A,B,demonio,Dia).
% tipos de habitantes.
tipo(dios).
tipo(demonio).
tipo(humano).
opuesto(dia, noche).
opuesto(noche, dia).
% X dice Y es (divino|humano|demonio)
% dice(X, Y, (divino|humano|demonio), Dia)
dice(demonio,Y,Tipo,_):-
tipo(Y),
Y \== Tipo.
dice(dios, Tipo, Tipo,_).
dice(humano, Y, Tipo, noche):-
tipo(Y),
Y \== Tipo.
dice(humano, Tipo, Tipo, dia).
% X dice es (dia|noche)
% dice(X, (dia|noche), Dia )
dice(demonio, Dia, DiaV):-
opuesto(Dia, DiaV).
dice(dios, Dia, Dia).
% Si un humano dice que es de dia, no se deduce nada. Si dice que es de
% noche, es absurdo.
dice(humano, dia, _).
% NOTA: El programa se puede ampliar para admitir enunciados del tipo:
% A no es (divino|humano|demonio)
% A (miente|dice la verdad)
% A no (miente|dice la verdad)
% Otra ampliacion posible es incluir una gramatica para poder escribir
% las frases directamente.
Valora esta pregunta


0