На основании вашего комментария
Это только база знаний ресторанов.Других правил нет.
мы возьмем их оттуда и начнем с заданных правил.
restaurant(spaghetti, italian, 20).
restaurant('naan bread', indian, 30).
Далее идет запрос, который вы пытаетесь
likes(adam, spaghetti).
Это верно, но, как мы отмечаем в комментариях, некоторые факты отсутствуют.
Самый простой факт, чтобы сделать запрос правильным, был бы
likes(adam, spaghetti).
, но выесть другие запросы, такие как
likes(adam, restaurant, italian).
и факты, такие как
restaurant('naan bread', indian, 30).
, которые предполагают, что вы знаете, что существуют отношения между четырьмя сущностями, adam
, itialian
и spaghetti
, 20
(цена).
Существуют бесконечные способы создания отношений, но для этого примера мы будем держать его более простым.
person(adam).
person(mary).
food_nationality(spaghetti, italian).
food_nationality(hamburger, americian).
food_nationality('naan bread', indian).
food_price(spaghetti, 20).
food_price(hamburger, 30).
food_price('naan bread', 30).
likes(adam,italian).
likes(mary,american).
Теперь, когда у нас есть некоторыефакты, если вы хотите узнать, сколько стоит Адаму съесть понравившуюся ему пищу, мы начнем с фактов и посмотрим, к чему мы можем прийти.
Мы видим факт
person(adam).
, но этотолько говорит нам, что Адам - человек, и не приводит к дополнительной информации по нашему вопросу.
Мы также видим факт
likes(adam,italian).
, который говорит нам, что Адам любит итальянский, но не дает нам особой еды.
Мы также видим
food_nationality(spaghetti, italian).
Такмы знаем, что Адам любит итальянский, а у итальянского есть спагетти, но нам все еще нужна цена.
Мы также видим,
food_price(spaghetti, 20).
Итак, мы знаем, что Адам любит итальянский, а у итальянского есть спагетти и спагетти, стоимость которых равна 20.ответ заключается в том, что для Адама есть то, что ему нравится, это будет стоить 20.
В качестве предиката Пролога это будет
cost_to_eat(Person,Price) :-
likes(Person,Nationality),
food_nationality(Food, Nationality),
food_price(Food, Price).
и запуск этого для Адама
?- cost_to_eat(adam,Price).
Price = 20.
Это также работает для Мэри
?- cost_to_eat(mary,Price).
Price = 30.
, и это также работает, если вы даете только цену
?- cost_to_eat(Person,20).
Person = adam ;
false.
, и это также работает, вы спрашиваете
?- cost_to_eat(Person,Cost).
Person = adam,
Cost = 20 ;
Person = mary,
Cost = 30.