Решение задачи
средствами языка Visual
Prolog
осуществляется путем логического вывода
необходимых сведений из уже известных.
Программа на VP
представляет собой конечную
последовательность определенных фактов,
относящихся к определенной предметной
области и правил вывода логических
заключений из этих фактов.
Программа состоит
из следующих блоков, начало которых
обозначается различными ключевыми
словами:
domains
– раздел описания доменов (начинается
со строчной буквы!), которые позволяют
задавать разные имена различным видам
данных, чтобы они не выглядели одинаково
и программист помнил что и в каком
порядке используется для обработки
predicates
– раздел определения фактов и правил.
Объявление предиката начинается с имени
предиката (начинается с буквы, можно
использовать знак «_», но нельзя знаки
«–« , «*» , пробел), а затем в () перечисления
доменов (стандартных, т.е. типов и
описанных ранее в разделе доменов)
clauses
– раздел записи фактов, отношений фактов
и правил. Правило создается с помощью
логических выражений. В VP
дизъюнкция обозначается «;», конъюнкция
«,», если «:-». Каждое правило и факт
заканчивается точкой.
goal
– раздел запросов, как и в правилах
использует переменные, логические
операции и имена фактов и правил.
Для более комфортного
запуска программ на VP
рекомендуется использовать утилиту
среды визуальной разработки Test
Goal
(Ctrl+G),
создав специальный TestGoal
– проект. Выполните следующую
последовательность операций:
-
Создайте новый проект Project – New Project.
-
В появившемся диалоговом окне Application Expert введите следующие данные
Рис.
1.1. Диалоговое
окно
Application Expert\General
Рис.
1.2. Диалоговое
окно
Application Expert\Target
-
После нажатия кнопки Create следует установить требуемые опции компилятора для созданного TestGoal-проекта:
-
Options – Project – Compiler Option.
-
Откройте вкладку Warnings. Установите переключатель Nondeterm, чтобы компилятор все определенные пользователем предикаты как недетерминированные.
-
Снимите флажки Non Quoted Symbols, Strong Type Conversion Check, Check Type of Predicates. Это будет подавлять некоторые возможные предупреждения компилятора, которые не важны для выполнения несложных программ.
Теперь
все программы следует открывать в
запущенном командой
Project
– Open
project
проекте
командой File
– New.
Работа с фактами, правилами и переменными. Применение отсечения ненужных решений
Задача
1.
Пусть заданы факты
о книгах, их авторах и количестве страниц.
Необходимо составить правило о том,
какой роман можно считать большим,
и реализовать это.
domains
% Описание доменов
пользователя
заглавие, автор =
symbol
страниц =
integer
predicates
% Описание предикатов
пользователя
книга(заглавие,
страниц)
написал(автор,
заглавие)
большой_роман(заглавие)
clauses
% Факты
написал(горький,
"МАТЬ").
написал(шолохов,
"ТИХИЙ ДОН").
книга("ТИХИЙ
ДОН",1250).
книга("МАТЬ",
310).
/* Правило,
определяющее, какая книга считается
большим романом */
большой_роман(Заглавие)
:-
написал(_, Заглавие),
%Автор в этом случае безразличен
книга(Заглавие,
Страниц),
Страниц > 300.
Goal
написал(Кто,Что).
На этот вопрос
prolog выдает ответ:
Кто=горький
Что="МАТЬ"
Кто=шолохов
Что="ТИХИЙ ДОН"
2 Solutions
Или такой запрос:
Goal
большой_роман(Заглавие).
В нашей базе данных
хранятся два романа, которые можно
считать большими, поскольку их объем
превышает 300 страниц. Поэтому ТП выдаст
следующее решение:
Заглавие="МАТЬ"
Заглавие="ТИХИЙ
ДОН"
2 Solutions
Примечание:
Строка со знаком % или заключенная
символами /* */ считается комментарием
Запуск цели
осуществляется командой Ctrl+G
или кнопкой G
на панели инструментов.
Комментариев нет:
Отправить комментарий