prolog,比较两个谓词

时间:2016-09-13 15:26:34

标签: prolog predicate

我有这个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之后我就会遗漏一些东西。任何帮助都会被贬低。

提前致谢。

1 个答案:

答案 0 :(得分:2)

我不是Prolog专家,但是......如果你写的话

same_category(Primero, Segundo) :-
  category(Primero, Type) = category(Segundo, Type).

您要求category(Primero, Type)category(Segundo, Type)相等;这只有在Primero = Segundo时才会出现。

但是Primero是第一个,Segundo是第二个,第一个和第二个之间没有交集。

如果您想检查PrimeroSegundo是否属于同一类别,则应检查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是错误的,因为在同一类别中选择PrimeroSegundo