27-05-2015, 21:06
Hola, me mandaron un Tp que tiene como punto el siguiente:
aliado(goku,gohan).
aliado(goku,bulma).
aliado(roque,goku).
aliado(piccolo,cell).
Se pide implementar estos predicados totalmente inversibles salvo indicación de lo contrario:
1. sonAliados/2: Verifica si dos guerreros son aliados.
?- sonAliados(saiyajin(goku,8),terricola(bulma)).
true.
El problema es que me pide que sea simetrico, osea que si Roque e aliado de Goku entonces Goku es aliado de Roque.
Yo pense en arreglarlo asi:
aliado(X,Y):-aliado(Y,X).
pero me crea un bucle interminable.
Como podria hacerlo?
sonAliados(Sujeto1,Sujeto2):-aliado(Nombre1,Nombre2), nombre(Nombre1,Sujeto1), nombre(Nombre2,Sujeto2).
nombre1(Nombre,saiayin(Nombre,_)).
nombre1(Nombre,terricola(Nombre)).
nombre1(Nombre,monstruo(Nombre,_)).
nombre(Nombre,Sujeto):-esGuerrero(Sujeto),nombre1(Nombre,Sujeto).
aliado(goku,gohan).
aliado(goku,bulma).
aliado(roque,goku).
aliado(piccolo,cell).
Se pide implementar estos predicados totalmente inversibles salvo indicación de lo contrario:
1. sonAliados/2: Verifica si dos guerreros son aliados.
?- sonAliados(saiyajin(goku,8),terricola(bulma)).
true.
El problema es que me pide que sea simetrico, osea que si Roque e aliado de Goku entonces Goku es aliado de Roque.
Yo pense en arreglarlo asi:
aliado(X,Y):-aliado(Y,X).
pero me crea un bucle interminable.
Como podria hacerlo?
sonAliados(Sujeto1,Sujeto2):-aliado(Nombre1,Nombre2), nombre(Nombre1,Sujeto1), nombre(Nombre2,Sujeto2).
nombre1(Nombre,saiayin(Nombre,_)).
nombre1(Nombre,terricola(Nombre)).
nombre1(Nombre,monstruo(Nombre,_)).
nombre(Nombre,Sujeto):-esGuerrero(Sujeto),nombre1(Nombre,Sujeto).