На этом шаге мы рассмотрим размещение фактов, правил и запросов.
Предположим, у вас есть следующие факты и правила:
Быстрая машина - приятная. (A fast car is fun).
Большая машина - красивая. (A big car is nice).
Маленькая машина - практичная. (A little car is practical).
Биллу нравится машина, если она приятная. (Bill likes a car if the car is fun).
Исследуя эти факты, вы можете сделать вывод, что Биллу нравится быстрый автомобиль. В большинстве случаев Пролог придет к подобному решению. Если бы не было фактов о быстрых автомобилях, вы не смогли бы логически вывести, какие автомобили нравятся Биллу. Вы можете делать предположения о том, какой тип машин может быть крепким, но Пролог знает только то, что вы ему скажете; Пролог не строит предположений.
Вот пример, демонстрирующий, как Пролог использует правила для ответа на запросы.
likes(ellen,tennis). likes(john,football). likes(tom,baseball). likes(eric,swimming). likes(mark,tennis). likes(bill,Activity):- likes(tom,Activity).
likes(bill,Activity):- likes(torn,Activity).
Это правило соответствует предложению естественного языка:
Биллу нравится занятие, если Тому нравится это занятие. (Bill likes an activity if Tom likes that activity)
В данном правиле заголовок - это likes (bill, Activity), а тело - likes (torn, Activity). Заметим, что в этом примере нет фактов о том, что Билл любит бейсбол. Чтобы выяснить, любит ли Билл бейсбол, можно дать Прологу такой запрос:
likes(bill,baseball).
likes (bill, Activity):- likes (tom, Activity).
predicates likes(symbol,symbol) clauses likes(ellen,tennis). likes(john,football). likes(tom,baseball). likes(eric,swimming). likes(mark, tennis). likes(bill,Activity):- likes (tom, Activity).
Запустите Пролог, загрузите программу pro11_1.pro с помощью пункта меню File | Load или клавиши F3, запустите программу с помощью пункта Run или сочетания клавиш Alt+R и после запроса цель наберите: likes(bill,baseball).
Пролог ответит:
yes (да)
Система использовала комбинированное правило
likes(bill,Activity):- likes(tom,Activity).
likes(tom,baseball).
likes(bill,baseball).
Попробуйте также следующий запрос:
likes(bill,tennis).
Пролог ответит:
no (нет)
Пролог ответит по на последний запрос "Does Bill like tennis?" (Любит ли Билл теннис), поскольку:
Вполне возможно, что Билл любит теннис в реальной жизни, но ответ Пролога основан только на фактах и правилах, которые вы дали ему в тексте программы.
На следующем шаге мы рассмотрим общие представления о переменных.