2016-09-13 79 views
0

我有此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的” + “波洛-AL-ajillo”, “brandada-DE-卡劳” + “波洛-AL-ajillo”

我的问题是,下面的谓词:

same_category(Primero的,Segundo的)

当我尝试时总是返回false。

same_category(“pollo-en-salsa”,“ajo-blanco”)。

返回false(这是正确的,他们不具有相同的类别)

same_category( “阿霍布兰科”, “empanadilla-DE-火腿-Y-大豆”)。

回报˚FALSE太(这是错误的,他们不具有相同的类别)

我相信,我的思念,因为即时通讯新进入序言东西。任何帮助都会有所帮助。

在此先感谢。

回答

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是错误的,因为选择一个Primero a nd Segundo在同一类别中。