Определение отношений в программе
1.3. Приложение Prolog Inference Engine
Приложение Prolog Inference Engine (PIE) входит в собрание примеров Visual Prolog Examples, которые поставляются вместе с системой Visual Prolog (). Оно представляет собой интерпретатор реализации языка Пролог, синтаксис которой близок к реализации Эдинбургского Пролога. Для запуска приложения необходимо открыть проект в среде разработки Visual Prolog. Для этого нужно запустить файл vip.exe, выбрать команду меню Project > Open, нажать кнопку Browse… окна Visual Prolog Environment (рис. 1.1) и открыть файл Visual rolog Examples\pie\pie.vipprj. После этого следует выбрать команду меню Build > Execute (см. замечание в конце главы). В дальнейшем можно сразу запускать Exe-файл приложения PIE.
Информация об открываемых (и вновь созданных) проектах отображается в окне Visual Prolog Environment. Открывать проекты повторно можно прямо из списка проектов.
В следующей программе определяются предикаты летает/1, животное/1 и птица/1.
летает("синица"). % факты летает("лебедь"). летает("аэроплан"). животное("лебедь"). животное("синица"). животное("тигр"). птица("пингвин"). птица("страус"). птица(X):- животное(X), летает(X). % правило ?- птица(A). % запросПример 1.1. "Птицы"
Упражнение 1.
- Какие элементы принадлежат отношению "птица", определенному в программе "Птицы" (см. листинг 1.1)?
- Запустите приложение PIE, поместите в него программу "Птицы" и найдите ответ на запрос к программе. Для этого откройте новый файл, поместите в него текст программы (факты и правила), сделайте активным окно с программой и выберите команду меню Engine > Reconsult. В окне Dialog введите запрос птица(A).
Поставьте курсор после знака точки и нажмите клавишу Enter (рис. 1.2). Ответ на запрос появится в этом же окне.
Для имен переменных в PIE следует использовать буквы латинского алфавита, для предикатов и констант можно использовать кириллицу. На языке Visual Prolog можно использовать кириллицу и для имен переменных.
В следующей программе в виде фактов определяются отношения "родитель", "супруг", "мужчина" и "женщина". С их помощью в виде правил определяются отношения "отец" и "мать".
родитель("Иван", "Мария"). родитель("Анна", "Мария"). родитель("Мария", "Павел"). родитель("Мария", "Петр"). супруг("Иван", "Анна"). супруг("Павел", "Юлия"). мужчина("Иван"). мужчина("Павел"). мужчина("Петр"). женщина("Мария"). женщина("Анна"). женщина("Юлия"). отец(F, C):- родитель(F, C), мужчина(F). мать(M, C):- родитель(M, C), женщина(M).Пример 1.2. "Родственные отношения"
Упражнение 2.
Запустите в PIE программу "Родственные отношения" (см. листинг 1.2). Задайте следующие вопросы программе:
-
Частный простой запрос (является ли Иван родителем Петра?):
родитель("Иван", "Петр").
-
Общий простой запрос (найти всех мужчин):
мужчина(M).
-
Конъюнктивный составной общий запрос (найти сыновей Марии):
родитель("Мария", S), мужчина(S).
-
Простой общий запрос с отбором информации при помощи анонимной переменной (кто из женщин замужем?):
супруг(_, W).
-
Дизъюнктивный составной общий запрос (найти всех персон):
мужчина(P); женщина(P).
Найдите ответ на последний вопрос с помощью добавления нового правила в программу, определяющего отношение персона/1, которому принадлежат все мужчины и женщины.