序言,比较两个谓词

prolog, comparing two predicates

我有这个 proLog 环境(烹饪材料):

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 个盘子的菜单:第一个盘子和第二个盘子,这两个盘子不属于同一类别,因此 menu_simple 谓词的 2 个正确组合是:

"ajo-blanco" + "pollo-al-ajillo", "brandada-de-bacalao" + "pollo-al-ajillo"

我的问题是以下谓词:

same_category(Primero, Segundo)

我尝试时总是 returns 错误。

same_category("pollo-en-salsa", "ajo-blanco").

returns false(正确,他们不属于同一类别)

same_category("ajo-blanco", "empanadilla-de-jamon-y-soja").

returns f also too (这是错误的,他们不属于同一类别)

我确信我遗漏了一些东西,因为我是 prolog 的新手。如有任何帮助,我们将不胜感激。

提前致谢。

我不是 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).

另一个观察:如果你想要 "this two plates are not from the same category",你实际的 menu_simple/2 是错误的,因为 select 一个 Primero 和一个 Segundo 在同一类别中.