2016-09-13 6 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 секунду, и эти две пластины не из одной и той же категории, так что 2 правильные комбинации для menu_simple предиката являются:

«аджо-Бланко» + "Pollo-аль-ajillo", "brandada-де-Bacalao" + "Pollo-аль-ajillo"

Моя проблема заключается в том, что следующий предикат:

same_category (Primero, Сегундо)

всегда возвращает false, когда я пытаюсь.

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

возвращает ЛОЖЬ (это правильно, они не имеют той же категории)

same_category ("аджо-Бланко", "empanadilla-де-хамон-у-Соя").

возвращает F Alse тоже (это не так, они не имеют ту же категорию)

Я уверен, что я что-то с момента им нового в пролог отсутствую. Любая помощь будет оценена.

Заранее спасибо.

ответ

2

Я не эксперт Пролог, но ... если вы напишете

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). 

Другое замечание: если вы хотите, чтобы «эти две пластины были не из той же категории», ваш фактический menu_simple/2 неверен, потому что выберите Primero a nd a Segundo в той же категории.

 Смежные вопросы

  • Нет связанных вопросов^_^