Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Часть 4. Язык функционально-логического программирования FLOGOL

.pdf
Скачиваний:
20
Добавлен:
28.06.2014
Размер:
971.45 Кб
Скачать

4. ЯЗЫК ФУНКЦИОНАЛЬНО- ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ FLOGOL

4. ЯЗЫК ФУНКЦИОНАЛЬНО- ЛОГИЧЕСКОГО ПРО-

ГРАММИРОВАНИЯ FLOGOL

4.1.Парадигмы функционального и логического программирова-

ния.

Давно прошли времена, когда программой называли алгоритм реше-

ния некоторой задачи. Полагая понятие задачи интуитивно понятным, по-

пробуем дать более широкую трактовку термина «программирование».

Программирование – деятельность (профессиональная, научно-

обоснованная или творческая), целью которой является представле-

ние задачи в форме, допускающей ее дальнейшее автоматическое ре-

шение конкретным вычислителем.

Таким образом, мы полагаем, что необходимая для решения задачи информация произвольным образом распределяется между программой и вычислителем. Конкретизируя понятие задачи до представления о суще-

ствовании «исходных данных» и «результатов» ее решения, попробуем с позиций их взаимосвязи кратко охарактеризовать основные, разумеется,

абстрактные стили программирования.

Пусть исходные данные представлены на языке L I , а результаты ре-

шения на языке LO (языком мы называем конструктивно заданное под-

множество формальных конструктивных объектов).

Алгоритмический стиль программирования предполагает, что про-

грамма представляет собой непосредственно воспринимаемую вычислите-

лем пару – исходного данного a L I и конструктивно заданного описа-

ния на языке L (в общем случае частичного) оператора

a

на множестве

 

 

 

I

 

O L , где

 

I

 

 

 

 

элементов языка

L , такого, что

L

L

L

и

L I ,

LO и LO

связаны между

собой конструктивно определенными

взаимно-

FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ

4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL

однозначными соответствиями. Последовательность элементов

a0 , a1 ,...,an

языка L

называется процессом вычисления для

a a0 L I с результатом

an LO ,

если для всех i 0.. n 1

ai 1 a (ai )

и для всех

j 1.. n 1

a j LO .

Алгоритмический стиль программирования поддерживает боль-

шинство языков программирования общего назначения, различающихся сложностью языков L и L .

Трансформационный стиль программирования предполагает, что про-

грамма – включающий всю информацию о задаче (в том числе и об исход-

ном данном) элемент a языка L , на множестве всех элементов которого задано отношение редукции в форме системы правил (называемых также правилами переписывания). Элемент b L , к которому редуцируется a и

к которому не применимы правила редукции (говорят, что b находится в

нормальной форме относительно этих правил), рассматривается как ре-

зультат решения задачи. Если система правил редукции обладает свой-

ством Черча-Россера (конфлюэнтностью), то результат – единственный

(если он вообще существует). Трансформационный стиль вычислений ха-

рактерен для всех теоретических и практически используемых языков про-

граммирования, основу семантики которых представляет -исчисление.

Функциональный стиль программирования предполагает, что исход-

ные данные и результаты решения задачи связаны функциональной зави-

симостью, описание которой, наряду с исходными данными, и составляет содержание программы. В частном случае, поиск вычислителем решения задачи может определяться как процесс редукции по системе правил, об-

ладающей свойством Черча-Россера. Другой подход основан на представ-

лении нужной функциональной зависимости в форме некоторой компози-

ции базисных функций. В число допустимых способов композиции обычно включаются суперпозиция и оператор рекурсии. Основным достоинством функциональных программ является то, что в них не требуется описание

FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 2

4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL

процесса вычислений определяемых функций, уточнение которого осу-

ществляет вычислитель. Согласованность структуры функциональной про-

граммы с композиционной структурой самой функции является хорошей основой для спецификации и верификации программ, для выбора эффек-

тивных путей реализации вычислений, в том числе и с использованием возможностей параллелизма в работе вычислителя. Обеспечение возмож-

ности передачи вычислителю дополнительной информации, вообще гово-

ря, не являющейся необходимой для получения результата, позволяет вы-

числителю оптимизировать процесс вычислений и по времени вычисле-

ний, и по использованию ресурсов, что для общих моделей вычислений,

как правило, представляется диалектическим противоречием. Следует от-

метить, что, к сожалению, известные языки функционального программи-

рования по своему уровню поддержки современных технологий програм-

мирования существенно уступают основным языкам программирования общего назначения.

Логический стиль программирования является в этом ряду еще более привлекательным. Действительно, предполагается, что в логической про-

грамме содержится только информация о необходимых свойствах ожидае-

мых результатов вычислений по отношению к исходным данным. В про-

цессе доказательства существования объектов с необходимыми свойства-

ми происходит и построение самих этих объектов – произвольного приме-

ра или перечисление всех возможных. Проблемы верификации логических программ не существует, от программиста требуется только грамотная формулировка задачи, а основную нагрузку по получению решения берет на себя вычислитель. Однако, во-первых, во много раз более остро стоит проблема эффективности исполнения логических программ, и к этому есть принципиальные предпосылки. В перспективе, конечно, для повторного решения подобных задач можно будет автоматически использовать уже

FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 3

4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL

один раз найденное функциональное или даже алгоритмическое описание решения, хотя о существующих на сегодняшний день подобных реализа-

циях автору не известно. Во-вторых, существуют принципиальные ограни-

чения на сложность логического языка, для которого вообще возможна эффективная процедура доказательства и извлечения из него решения, не говоря уже о построении модели для произвольной логической формулы этого языка. На сегодня планка стоит на уровне языка исчисления преди-

катов первого порядка, и вряд ли стоит ожидать принципиальных измене-

ний. Основное ограничение, конечно, не в том, что в этом языке допустимо применение кванторов только по индивидным переменным, а в том, что рассматриваются только ограниченный класс интерпретаций функцио-

нальных и предикатных символов – как всюду определенных функций и предикатов. Развитие логического стиля программирования представляет-

ся не только в интеграции с более «приземленными» стилями программи-

рования, но и в разработке потенциально неограниченного числа специ-

альных логических языков с полуразрешимой проблемой строгого или, по крайней мере, «правдоподобного» доказательства.

Теория направленных отношений предоставляет возможности едино-

образного выражения логических формул, схем функций и отношений, со-

ставляющих основу построения и логических языков, и языков описания вычислимых функций. Предложенные модели вычислений и механизмы логического вывода являются теоретически подкрепленной основой реали-

зации рассматриваемого далее языка функционально-логического про-

граммирования, опирающегося на понятие направленного отношения.

4.2.Общие принципы построения языка функционально-

логического программирования FLOGOL.

Язык функционально-логического программирования FLOGOL

(Function and LOGic Oriented Language) предназначен для сложных рекур-

FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 4

FLOGOL -

4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL

сивных определений систем функций, предикатов и других математиче-

ских объектов некоторой предметной области с целью их логического ана-

лиза и вычислений.

Центральной идеей построения на базе языка FLOGOL системы функционально-логического программирования является представление основных семантических объектов как направленных отношений. На тео-

рию направленных отношений опирается и реализация системы.

Язык построен с использованием ряда основных архитектурных и технологических решений, характерных для современных развитых языков программирования. Ниже приводится их краткая неформальная характери-

стика, имеющая своей целью создать общее впечатление о языке

FLOGOL .

1.Модульная структура. Информационная среда программирования на языке FLOGOL представляет собой библиотечную архитектуру, эле-

менты которой называются FLOGOL -модулями и в которой поддер-

живается обычный набор функций – создание, редактирование, удале-

ние и т.д. отдельных модулей. Модули представлены в библиотеке в не-

скольких взаимосвязанных формах:

-в виде текстов на языке FLOGOL (исходных модулей), для обработ-

ки которых используется специализированный текстовый редактор;

-в «графическом» представлении (в виде графических модулей);

связь с графическими модулями осуществляется через оригиналь-

ный экранный редактор, построенный с учетом особенностей сете-

вого представления направленных отношений. Эта форма представ-

ления, с одной стороны, отражает иерархическую структуру моду-

лей с учетом «видимости» объектов, а, с другой стороны, при опре-

делении d -отношений в форме графиков (см. далее) непосред-

FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 5

4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL

ственно использует сетевое представление таких отношений, что позволяет еще на этапе определения d -отношений выполнять опе-

рации подстановки, последовательной и параллельной композиции для представляющих эти отношения сетей;

-в форме специальных кодов (объектных модулей), полученных раз-

дельной компиляцией исходных модулей или конструируемых в процессе использования экранного графического редактора и пред-

ставляющих собой процедуры, участвующие в выполнении так называемых запросов к системе.

Заметим, что первые две из указанных форм представления являют-

ся взаимно конвертируемыми. Как уже отмечалось, оконечной задачей модулей является описание, как правило, рекурсивное, направленных отношений, представляющих конкретные математические объекты не-

которой предметной области. Их внутреннее представление формиру-

ется на основе запроса к FLOGOL -системе программирования и пред-

полагает сетевое задание требуемого направленного отношения в фор-

ме сетевой КС-грамматики.

Между модулями имеется отношение частичного порядка, устанав-

ливаемое при их описании путем задания для каждого модуля списка модулей-«родителей», так что при определении объектов модуля все его модули-«предки» оказываются в области «видимости».

2.Иерархическая структура F L O G O-Lпрограмм. Синтаксически модули программы представляют собой специальные языковые конструкции с иерархической структурой, определенные в форме одного или двух до-

менных выражений (синтаксически определяемых нетерминальным символом ДомВыр), разделенных ключевым словом WHERE и до-

пускающих неограниченную глубину вложенности. Для инкапсуляции этих конструкций используются специальные скобки DOMAIN END.

FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 6

4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL

Инкапсулированные конструкции (домены) получают имена, которые используются для внешнего по отношению к домену вызова описанных в нем объектов (с использованием квалифицированных имен), причем доступными для внешних вызовов являются только объекты, описан-

ные в первом из доменных выражений. Объекты, описанные во втором доменном выражении (после WHERE) доступны только для прямого вызова изнутри самого домена. В остальном доменная структура моду-

ля определяет видимость объектов внутри модуля общепринятым обра-

зом. Доменное выражение задает множество описаний направленных отношений (точнее, схем направленных отношений) и вложенных до-

менов.

3.Виды описаний направленных отношений. В языке допускаются два вида описаний – объявление и определение направленного отношения.

Первый вариант предполагает, что объявленное отношение является первичным (или, с позиций средств конструирования отношений, его имя является терминальным символом) и интерпретация объявленного имени либо задается внешним по отношению к языку FLOGOL спосо-

бом (на это указывает ключевое слово EXT; как правило, это – функ-

циональные отношения и для их интерпретации используются храня-

щиеся в специальных библиотеках подпрограммы вычисления выход-

ного набора данных по заданному входному), либо принимается стан-

дартной – как конструктора или реконструктора на эрбрановском универсуме. Второй вариант – определение – вводит новое уравнение,

точнее, новую схему уравнений в рекурсивную систему определений,

т.е. имя этого отношения рассматривается как реляционная переменная

(нетерминальный символ).

4.Спецификация отношений. Все описываемые отношения явно или неяв-

но специфицируются. Явная спецификация может быть представлена в

FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 7

4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL

общей форме или с использованием особых спецификаторов. Общая форма спецификации предполагает задание арности отношения (в виде заключенных в круглые скобки и разделенных двоеточием двух арифме-

тических выражений с возможными натуральными значениями) и, опци-

онно, свойств тотальности и функциональности самого описываемого и обратного ему отношений. Наличие указанных свойств отмечается знаками «+» в определенных позициях (тотальность – после открываю-

щей скобки, функциональность – перед двоеточием, функциональность обратного отношения – после двоеточия, тотальность обратного отно-

шения – перед закрывающей скобкой). На рис. 4.1 приведена таблица спецификаторов отношений и для каждого спецификатора приведена эк-

вивалентная спецификация в общей форме.

СПЕЦИФИКАТОР

СПЕЦИФИКА-

ЦИЯ

 

 

 

ASSERTION

(0 : 0)

 

 

PROPERTY

(1 : 0)

 

 

PREDICATE (m)

(m : 0)

 

 

OBJECT

( 0 : 1)

 

 

SET

(0 : 1)

 

 

TUPLE (n)

( 0 : n)

 

 

TUPLE_SET (n)

(0 : n)

 

 

TRANSPOSITION

( 1 : 1 )

SUBSTITUTION

( 1 : 1)

 

 

FUNCTOR

( 1 :1)

 

 

OPERATOR

(1 :1)

 

 

TRANSITION

(1:1)

 

 

TUPLE_TRANSPOSITION (m)

( m : m )

 

 

TUPLE_SUBSTITUTION (m)

( m : m)

 

 

TUPLE_FUNCTOR (m)

( m : m)

 

 

TUPLE_OPERATOR (m)

(m : m)

 

 

TUPLE_TRANSITION (m)

(m : m)

 

 

 

 

FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 8

4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL

 

 

SUPER_CONSTRUCTOR (m)

( m : 1 )

 

 

CONSTRUCTOR (m)

( m : 1)

 

 

FUNCTION (m)

( m :1)

 

 

REFLECTION (m)

(m :1)

 

 

SUPER_RECONSTRUCTOR

( m : n )

 

 

(m, n)

( m : n)

RECONSTRUCTOR (m, n)

TUPLE_FUNCTION (m, n)

( m : n)

 

 

TUPLE_REFLECTION (m, n)

(m : n)

 

 

RELATION (m, n)

(m : n)

 

 

Рис. 4.1. Таблица спецификаторов отношений в языке FLOGOL.

5.Способы определения направленных отношений. Возможны два спосо-

ба определения направленных отношений – композиционный и аппли-

кативный. Композиционное определение дается в форме реляционного выражения (РелВыр – соответствующее синтаксическое понятие), за-

дающего направленное отношение как композицию отношений, пред-

ставленных терминальными и нетерминальными символами, и исполь-

зующую в качестве базовых операций последовательную и параллель-

ную композиции, объединение и пересечение отношений, а также обра-

щение направленного отношения. Аппликативный способ определяет направленное отношение непосредственно как график этого отношения.

При этом, в общем случае, с этой целью задаются термы (переменные термов локализованы внутри соответствующего графика), описываю-

щие входные и выходные кортежи элементов определяемого отноше-

ния, т.е. возможные разметки входных и выходных точек в сетевом представлении отношения. В описание графика может входить логиче-

ская формула, описывающая ограничения на значения переменных в термах, которые вносятся элементами представляющей отношение сети,

не связанными непосредственно с описанием ее входов и выходов.

FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 9

4.ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL

6.Имена всех объектов описания – доменов и отношений – могут быть индексированы. Наборы индексов могут отличаться как количеством индексов, так и их значениями, в качестве которых используются нату-

ральные числа. Вычисляющие индексы арифметические выражения за-

писываются через запятые в квадратных скобках перед именем описы-

ваемого объекта. Использование в качестве индексов арифметических выражений и операторов свертки в доменных выражениях позволяет описывать сразу множество объектов, имена которых при одном и том же идентификаторе могут отличаться наборами индексов. Использова-

ние операторов свертки при определении списка индексов позволяет создавать списки индексов, длина которых зависит от параметров свертки.

7.Повторное описание непосредственно в одном домене (описания во вложенных доменах не учитываются) объекта – отношения или домена

– с одним и тем же именем, т.е. с тем же идентификатором и тем же

набором индексов, рассматривается как продолжение этого описания.

Для отношений правые части всех таких определений полагаются неяв-

но связанными операцией объединения отношений. Для доменов мно-

жества описанных в них объектов неявно объединяются в один домен

(раздельно – видимые извне и скрытые – части доменов с одним и тем же именем), в результате чего вновь могут возникнуть повторные опи-

сания объектов и т.д.

8.Все определяемые отношения и домены могут быть параметризованы.

Имена формальных параметров – стандартные: порядковые номера па-

раметров (нумерация с нуля) в уголковых кавычках. Фактическими зна-

чениями параметров могут быть только конкретные отношения. Ин-

формация о параметрах размещается при описании объекта после иден-

тификатора в квадратных скобках. Формальные параметры могут быть

FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 10