序言,比较两个谓词
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
是第二,第一和第二没有交集。
如果要检查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).
另一个观察:如果你想要 "this two plates are not from the same category",你实际的 menu_simple/2
是错误的,因为 select 一个 Primero
和一个 Segundo
在同一类别中.
我有这个 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
是第二,第一和第二没有交集。
如果要检查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).
另一个观察:如果你想要 "this two plates are not from the same category",你实际的 menu_simple/2
是错误的,因为 select 一个 Primero
和一个 Segundo
在同一类别中.