Учебное пособие: Язык логического программирования Visual Prolog
What does Cindy like? (Что любит Синди?)
likes(cindy, What).
то Пролог ответил бы:
What = bill
What = cindy
What = dogs
3 solutions
поскольку Пролог знает, что Синди любит Билла, и что Синди любит то же, что и Билл, и что Билл любит Синди и собак.
Мы могли бы задать Прологу и другие вопросы, которые можно задать человеку. Но вопросы типа "Какую девушку любит Билл?" не получат решения, т. к. Прологу в данном случае не известны факты о девушке, а он не может вывести заключение, основанное на неизвестных данных: в этом примере мы не дали Прологу какого-нибудь отношения или свойства, чтобы определить, являются ли какие-либо объекты девушками.
6. Размещение фактов, правил и запросов
Предположим, есть следующие факты и правила:
Быстрая машина — приятная. (Afastcarisfun).
Большая машина — красивая. (A big car is nice).
Маленькая машина — практичная. (A little car is practical).
Биллу нравится машина, если она приятная. (Bill likes a car if the car is fun).
Исследуя эти факты, вы можете сделать вывод, что Биллу нравится быстрый автомобиль. В большинстве случаев Пролог придет к подобному решению. Если бы не было фактов о быстрых автомобилях, вы не смогли бы логически вывести, какие автомобили нравятся Биллу. Вы можете делать предположения о том, какой тип машин может быть крепким, но Пролог знает только то, что вы ему скажете. Пролог не строит предположений.
Вот пример, демонстрирующий, как Пролог использует правила для ответа на запросы. Посмотрите на факты и правила в этой части программы ch02e01.pro:
likes(ellen, tennis).
likes (John, football).
likes (torn, baseball).
likes (eric, swimming).
likes (mark, tennis).
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(torn, Activity).
Загрузите программу ch02e01.pro в среду визуальной разработки VisualProlog и запустите ее утилитой TestGoal.