26-06-2015, 23:58
Necesito ayuda
Tengo esta base de conocimiento:
bebida(dulceDeLecheLatte,[base(cafe,100),leche(10,50)]).
bebida(frappuccinoFrutilla,[base(helado,80),jarabe(frutilla),jarabe(dulceDeLeche),leche(2,60)]).
bebida(irishCream,[base(cafe,90),jarabe(baileys),leche(3,50)]).
bebida(explosiva,[base(ron,90),base(vodka,100),jarabe(frutilla)]).
bebida(extrema,[base(cafe,100),base(helado,80),base(ron,90),leche(10,10),jarabe(chocolate)]).
bebida(light,[base(cafe,5),jarabe(frutilla)]).
bebida(cafecito,[base(cafe,10)]).
bebida(conTodo,[base(cafe,5),jarabe(frutilla),base(helado,80),base(mouse,90),leche(10,10),jarabe(chocolate),base(helado,80),base(mouse,90),leche(10,10),jarabe(chocolate),base(helado,80),base(mouse,90),leche(10,10),jarabe(chocolate)]).
bebida(milkshake, [base(helado, 80), leche(5, 10)]).
bebida(cafeConLeche, [base(cafe, 5), leche(5, 10)]).
tieneAlcohol(baileys).
tieneAlcohol(tiaMaria).
tieneAlcohol(vodka).
tieneAlcohol(ron).
Este predicado (relaciona una bebida con sus ingredientes):
ingrediente(Bebida,Ingrediente):-
bebida(Bebida,Ingredientes),
member(Ingrediente,Ingredientes).
y tengo que hacer este punto:
-Saber si una bebida esAlcoholica/1 , es decir, si tiene algun componente que sea alcoholico.
A mi se me ocurrio hacer lo siguiente:
esAlcoholica(Bebida):-
baseOjarabe(Bebida).
baseOjarabe(Bebida):-
ingrediente(Bebida, jarabe(Nombre)),
tieneAlcohol(Nombre).
baseOjarabe(Bebida):-
ingrediente(Bebida,base(Nombre,_)),
tieneAlcohol(Nombre).
Esto compila y cuando pregunto por una bebida me dice efectivamente si es o no alcoholica, pero si consulto para que me de todas las bebidas que son alcoholicas me da esto:
| esAlcoholica(B).
B = irishCream ;
B = explosiva ;
B = explosiva ;
B = extrema ;
false.
el problema de esto es que despues tengo que utilizar el predicado esAlcoholica en otro predicado y me termina dando mal.
Alguna ayuda? creo que debe ser un problema de inversibilidad, pero no estoy del todo segura.
Tengo esta base de conocimiento:
bebida(dulceDeLecheLatte,[base(cafe,100),leche(10,50)]).
bebida(frappuccinoFrutilla,[base(helado,80),jarabe(frutilla),jarabe(dulceDeLeche),leche(2,60)]).
bebida(irishCream,[base(cafe,90),jarabe(baileys),leche(3,50)]).
bebida(explosiva,[base(ron,90),base(vodka,100),jarabe(frutilla)]).
bebida(extrema,[base(cafe,100),base(helado,80),base(ron,90),leche(10,10),jarabe(chocolate)]).
bebida(light,[base(cafe,5),jarabe(frutilla)]).
bebida(cafecito,[base(cafe,10)]).
bebida(conTodo,[base(cafe,5),jarabe(frutilla),base(helado,80),base(mouse,90),leche(10,10),jarabe(chocolate),base(helado,80),base(mouse,90),leche(10,10),jarabe(chocolate),base(helado,80),base(mouse,90),leche(10,10),jarabe(chocolate)]).
bebida(milkshake, [base(helado, 80), leche(5, 10)]).
bebida(cafeConLeche, [base(cafe, 5), leche(5, 10)]).
tieneAlcohol(baileys).
tieneAlcohol(tiaMaria).
tieneAlcohol(vodka).
tieneAlcohol(ron).
Este predicado (relaciona una bebida con sus ingredientes):
ingrediente(Bebida,Ingrediente):-
bebida(Bebida,Ingredientes),
member(Ingrediente,Ingredientes).
y tengo que hacer este punto:
-Saber si una bebida esAlcoholica/1 , es decir, si tiene algun componente que sea alcoholico.
A mi se me ocurrio hacer lo siguiente:
esAlcoholica(Bebida):-
baseOjarabe(Bebida).
baseOjarabe(Bebida):-
ingrediente(Bebida, jarabe(Nombre)),
tieneAlcohol(Nombre).
baseOjarabe(Bebida):-
ingrediente(Bebida,base(Nombre,_)),
tieneAlcohol(Nombre).
Esto compila y cuando pregunto por una bebida me dice efectivamente si es o no alcoholica, pero si consulto para que me de todas las bebidas que son alcoholicas me da esto:
| esAlcoholica(B).
B = irishCream ;
B = explosiva ;
B = explosiva ;
B = extrema ;
false.
el problema de esto es que despues tengo que utilizar el predicado esAlcoholica en otro predicado y me termina dando mal.
Alguna ayuda? creo que debe ser un problema de inversibilidad, pero no estoy del todo segura.