我有这个proLog environtment(烹饪的东西):
first("ajo-blanco").
first("brandada-de-bacalao").
second("empanadilla-de-jamon-y-soja").
second("pollo-al-ajillo").
category("ajo-blanco", aperitivos_tapas).
category("brandada-de-bacalao", aperitivos_tapas).
category("empanadilla-de-jamon-y-soja", aperitivos_tapas).
category("pollo-al-ajillo", carnes_y_aves).
same_category(Primero, Segundo) :-
category(Primero, Type) = category(Segundo, Type).
menu_simple(Primero, Segundo) :-
first(Primero),
second(Segundo),
same_category(Primero, Segundo).
我定义了4个板,2个第一板和2个第二板。 menu_simple对象是一个具有2个板块的菜单:1个第一个和1秒,这两个板块不是同一类别,因此menu_simple谓词的2个正确组合是:
“ajo-blanco”+“pollo-al-ajillo”,“brandada-de-bacalao”+ “波多博罗-AL-ajillo”
我的问题是以下谓词:
same_category(Primero,Segundo)
在我尝试时总是返回false。
same_category(“pollo-en-salsa”,“ajo-blanco”)。
返回false(这是正确的,它们没有相同的类别)
same_category(“ajo-blanco”,“empanadilla-de-jamon-y-soja”)。
也会返回(这是错误的,它们没有相同的类别)
我确信自从我成为prolog之后我就会遗漏一些东西。任何帮助都会被贬低。
提前致谢。
答案 0 :(得分:2)
我不是Prolog专家,但是......如果你写的话
same_category(Primero, Segundo) :-
category(Primero, Type) = category(Segundo, Type).
您要求category(Primero, Type)
和category(Segundo, Type)
相等;这只有在Primero = Segundo
时才会出现。
但是Primero
是第一个,Segundo
是第二个,第一个和第二个之间没有交集。
如果您想检查Primero
和Segundo
是否属于同一类别,则应检查Primero
的类型是否与Segundo
的类型相同,是
same_category(Primero, Segundo) :-
category(Primero, TypeP),
category(Segundo, TypeS),
TypeP = TypeS.
相当于
same_category(Primero, Segundo) :-
category(Primero, Type),
category(Segundo, Type).
另一个观察结果:如果你想要“这两个牌子不属于同一类别”,那么你的实际menu_simple/2
是错误的,因为在同一类别中选择Primero
和Segundo