- •Глава 4
- •Введение
- •Три точки зрения на Пролог-программу
- •4. 1. Реляционный подход
- •Изображение отношений
- •Ограничения, обеспечивающие целостность, которые накладываются при записи отношений в программу
- •Ограничения, обеспечивающие целостность, накладываемые при выборке фраз
- •Реализация свойств отношений
- •Нерефлексивность
- •Симметричное и транзитивное отношение
- •Первая попытка
- •Вторая попытка
- •Запоминание списка посещенных мест
- •4. 2. Взгляд на программу с точки зрения потока данных Переход от выходного потока данных к программе
- •Упорядоченные множества ответов
- •Генерирование бесконечного множества
- •Экологический процесс
- •Версия программы, в которой применяется поиск с возвратом
- •Рекурсивная версия программы
- •Планирование производственных операций
- •Сильные и слабые стороны подхода к программе с позиций потока данных
- •4.3. Бихевиористический подход Приведенные ранее примеры, в которых проявился бихевиористический подход
- •Ограничение сферы действия эффектов поведения
- •Программа "найти_или_спросить"
- •Оценка бихевиористического подхода
- •Библиографические заметки
- •Упражнения
Глава 4
ПОДХОДЫ К ПРОГРАММИРОВАНИЮ НА ЯЗЫКЕ ПРОЛОГ
Введение
В первых четырех главах книги было рассказано об основах языка Пролог и был рассмотрен ряд примеров, касающихся стиля программирования на этом языке. В данной главе обсуждается вопрос о том, как можно представить себе процесс программирования. В гл. 5, 6 и 7 рассматриваются конкретные сферы применения языка Пролог.
Три точки зрения на Пролог-программу
Вообще говоря, возможны три точки зрения программиста на Пролог-программу. Это, во-первых, реляционный подход, при котором программа рассматривается как множество взаимоопределенных, возможно, очень сложных, отношений между термами. Во-вторых, существует подход к программе с позиций потока данных. При этом подходе каждая процедура связывает друг с другом два или более входных/выходных потока. Здесь множество ответов, которое вырабатывается в соответствии с внутренней структурой программы с течением времени в результате выполнения действий, инициированных запросом, можно рассматривать как выходной поток данных. (Слово "поток" здесь используется для нестрогого определения последовательности элементов.) В-третьих, это — "поведенческий'" (или бихевиористический) подход, согласно которому программа существует лишь для того, чтобы реализовывать множество сверхлогичных поведенческих актов, т. е. для выполнения ввода, для выдачи сообщений и т. д. Эти поведенческие акты также вырабатываются с течением времени в соответствии с внутренней структурой программы в качестве ответа на запрос.
Реляционный подход
Выбор подхода, принимаемого при разработке конкретной компоненты программы, будет зависеть от того, какой аспект этой компоненты нашел отражение в ее спецификации (см. табл. 4. 1). Реляционный подход пригоден в том случае, когда хорошо известна структура предметной области. Процесс программирования при этом сводится к аксиоматическому определению каждого отношения (см. разд. 0. 9 и 6. 1). Входной и выходной потоки, а также поведение программы являются результатами действия запросов к отношению. Если отношение реализовано корректно, то будут правильными также входной и выходной потоки и поведенческие акты программы.
Таблица 4. 1 | |||
Род спецификации и требуемый вид программирования | |||
Что известно |
Вид программирования | ||
Структура системы, |
Выходной поток данных |
Поведение программы | |
известна |
? |
? |
Аксиоматическое определение отношений |
неизвестна
|
известен |
? |
Создание структуры программы, обеспечивающей выдачу нужного потока данных |
неизвестна
|
? |
известно |
Создание структуры программы, обеспечивающей заданное поведение |
Подход к программе с позиций потока данных
Взгляд на программу с позиций потока данных будет уместным в том случае, когда известна природа выходного потока (т. е. множество ответов). При программировании реализуется такая внутренняя структура программы, которая создает желаемый выходной поток. Если важен порядок следования ответов в выходном потоке, то при построении программы следует в явной форме учитывать процедурные факторы.
Поведенческий подход к программе
Поведенческий подход пригоден тогда, когда известно лишь желаемое поведение программы. Процесс программирования связан с построением такой внутренней структуры программы, которая обеспечит заданное поведение. При разработке такой программы следует обязательно учитывать процедурные факторы и влияние побочных эффектов.
Сосуществование всех трех подходов
Эти три подхода не являются взаимоисключающими, они представляют собой разные способы мышления в процессе программирования. С точки зрения стиля программирования рекомендуется применять либо реляционный подход, либо подход к программе с позиций потока данных, а к поведенческому подходу следует прибегать лишь в случае крайней необходимости. Причина этого заключается в том, что программы, при составлении которых применяется поведенческий подход, почти всегда трудно читать, сопровождать и переводить с одной версии языка Пролог на другую.