2016-09-13 130 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在同一類別中。