【问题标题】:prolog, comparing two predicatesprolog,比较两个谓词
【发布时间】:2016-09-14 00:10:19
【问题描述】:

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

“ajo-blanco”+“pollo-al-ajillo”、“brandada-de-bacalao”+ “波罗阿吉略”

我的问题是以下谓词:

same_category(Primero, Segundo)

我尝试时总是返回 false。

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

返回 false(这是正确的,它们没有相同的类别)

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

也返回假(这是错误的,它们没有相同的类别)

我确信我错过了一些东西,因为我是 prolog 的新手。任何帮助将不胜感激。

提前致谢。

【问题讨论】:

    标签: prolog predicate


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-09
      • 2019-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多