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

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

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

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

(СписЗнач), построенного синтаксически подобно множеству значений, но в котором по-иному интерпретируются символы операций. Полученные таким образом конструкции первичных выражений могут связываться символами бинарных операций (параметр «2»), применяемых в порядке,

определяемом их приоритетами. Наконец, для построения выражений мо-

жет использоваться условная конструкция IF-THEN-ELSE, управляемая значением логического выражения (ЛогВыр); при отсутствии ELSE-части соответствующее значение по умолчанию определяется особо для каждого из возможных типов выражений.

АрВыр – арифметическое выражение – одно из наиболее синтаксиче-

ски сложных примеров использования общего шаблона Выр. Для постро-

ения арифметических выражений в качестве встроенных инфиксов исполь-

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

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

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

тических выражений (ПервАр) могут выступать натуральные константы

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

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

(префикс ) и входов (суффикс ) заданного отношения.

ЛогВыр – логическое выражение, тоже построенное по шаблону Выр,

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

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

юнкции, суммы по модулю 2 и дизъюнкции (инфиксы, перечислены в по-

рядке уменьшения приоритетов). Первичное логическое выражение

(ПервЛог) строится как цепочка арифметических выражений, связанных знаками операций арифметических отношений, и понимается как конъ-

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

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

юнкция соответствующих отношений между соседними элементами це-

почки.

МножЗнач – множество значений ключа в CASE-конструкции выра-

жений. Для построения множеств значений (как соответствующих выра-

жений) используются инфиксы операций над множествами: объединения,

пересечения и вычитания.

СписЗнач – список значений операторной переменной в операторе свертки. Для построения этих списков используется инфикс операции сцепления.

ПервМнСп – общая синтаксическая форма (но интерпретируемая по-

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

ющая или отдельное натуральное значение, или диапазон значений. Отсут-

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

мально возможное для реализации языка.

ИмяОтн – имя фактического отношения, задаваемого либо в форме квалифицированного имени (КвИмя), либо символом @ , понимаемым как конкретное отношение, либо как подстановочный параметр, порядко-

вый номер которого задается арифметическим выражением. Если вызыва-

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

КвИмя – квалифицированное имя отношения, предполагающее, в об-

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

шения для случая, когда КвИмя используется для ссылки на имя отноше-

ния.

Имя – конструкция имен описываемых доменов и отношений, пред-

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

ных параметров.

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

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

СпИнд – выражение, задающее список индексов имени отношения или домена, первичной формой которого является арифметическое выра-

жение, а единственным символом бинарной операции – знак операции пе-

речисления элементов списка (запятая).

СпПар – список параметров, синтаксически одинаково построенный и для списков формальных параметров, используемых в левых частях описа-

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

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

ЭлемСпПар – определяет различные виды элементов списков пара-

метров. Если в очередном элементе списка отсутствует компонент Груп-

Пар (группа параметров; фактически, это список номеров единообразно определяемых параметров), этот элемент определяет «очередной» пара-

метр, номер которого является непосредственно следующим за последним из номеров параметров предыдущего элемента списка (при отсутствии компонента ГрупПар в первом элементе списка определяется параметр с нулевым номером). Семантика повторного определения параметра с одним и тем же номером была пояснена в предыдущем разделе. Напомним, что список формальных параметров характеризует значения параметров, ис-

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

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

ветствующей арности и обладающими соответствующими свойствами.

РелВыр – реляционное выражение. Этот вид выражений используется в качестве правых частей определений отношений и для задания значений параметров (формальных и фактических): префикс ~ представляет опе-

рацию обращения отношения, префикс представляет операцию постро-

ения генератора области значений отношения, инфиксы представляют (в

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

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

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

ции ( ), конкатенации ( ), унификации ( ), условной композиции ( ),

параллельной композиции ( # ), пересечения ( ) и объединения ( ),

наконец, суффикс представляет операцию построения предиката при-

надлежности области определения отношения.

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

жении, либо так называемый график (График) – не композиционная форма определения отношений, связанная с их сетевым представлением.

График – конструкция сетевой формы определения отношений. Ис-

пользуемые конструкции – Терм и Формула. Первая используется для описания входных и выходных точек сети, а вторая – для описания компо-

нентов сети, не вошедших в описание ее входных и выходных точек.

ПервТерм – вид первичных выражений для термов. Это либо пустой терм, либо Вызов, либо локализованное в определении графика имя точки сети, возможно, индексированное.

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

ния из области интерпретации, связанные с выходными точками элемента,

представляющего некоторое отношение (ИмяОтн), с помощью термов,

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

Терм – особый вид выражений, при построении которых используют-

ся символы бинарных операций: запятая для обозначения конкатенации значений термов и меньшего приоритета символ « | » для операции соеди-

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

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

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

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

Формула – специальная форма выражений, в которых используются

знаки операций конъюнкции и дизъюнкции.

ПервФорм – первичная конструкция формул – либо вызов предиката

(отношения арности n,0 ), либо цепочка описывающих кортежи дан-

ных одинаковой длины термов, соединенных знаками отношений равен-

ства и неравенства. Цепочка термов t1 ,...,tn , n 1, связанных знаками ра-

венства, при n 1 эквивалентна формуле

x t1 &...& x tn , где

x – но-

вое имя точки, неявно вводимой для этой группы термов. Для

каждого

знака неравенства включается конъюнктивный член вида x x , где

x

представляет группу связанных знаком равенства термов слева от знака неравенства, а x – группу связанных знаком равенства термов справа от него.

Модуль – библиотечная единица FLOGOL -программы; вводит имя домена, определяет видимость (извне) отношений, описанных в других доменах, путем задания списка имен модулей-родителей, и содержит иерархически организованное множество описаний отношений, синтакси-

чески имеющее форму так называемого домена.

Домен – структурный компонент множества описаний, включающий,

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

ных выражений – особого вида выражений, интерпретируемых как множе-

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

ный домен. Первое из них описывает объекты, «видимые» не только внут-

ри этого домена, но и извне (с помощью квалифицированных имен), а вто-

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

емого домена.

ИмяДом – имя домена, представленное уже рассмотренной ранее кон-

струкцией КвИмя.

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

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

ЭлемОпис – элемент описания в доменах. В качестве объектов описа-

ния выступают отношения и вложенные домены: для отношений возмож-

ны две формы описания – объявление и определение, а для доменов – только определение. Объявляемое имя отношения обязательно должно быть специфицировано, причем одинаково специфицированные отноше-

ния могут описываться общим списком. Если объявляемые имена отноше-

ний сопровождаются ключевым словом EXT, то их интерпретация задает-

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

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

но задает и вид определяемого объекта. Особенности определений, связан-

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

щем разделе. Альтернативой имени определяемого отношения является введение новой связки, операндные места которой ассоциируются с пара-

метрами этого отношения. Определение отношения со специальным, воз-

можно, индексированным именем EMPTY означает, что рассматривают-

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

ления представляет пустое отношение. Специальный компонент определе-

ний – Импорт – позволяет использовать в определении не полностью ква-

лифицированные имена доменов и отношений. Перечисленные в этой кон-

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

(контексты). Если один контекст является суффиксом другого, возможные конфликты разрешаются в пользу последнего, для несравнимых контек-

стов предпочтение отдается описанному в списке раньше.

Спец – спецификация описываемых имен отношений и подстановоч-

ных (формальных) параметров; спецификация дается либо в общей форме

(арность плюс свойства), либо использует специальные ключевые слова – спецификаторы.

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

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

Перенос текста программы со строки на строку осуществляется с точ-

ностью до лексем, представленных в диаграммах отдельными овальными

блоками. Комментарии могут включаться в программу в конце любой

строки (возможно и пустой) через двойной разделитель « // ».

Ниже приводится сводная таблица знаков операций для всех видов

выражений в языке FLOGOL

(знаки бинарных операций перечислены в

порядке уменьшения приоритетов).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 4.1

 

 

 

 

 

 

 

 

 

 

 

 

 

ВИД

УНАРНЫЕ

 

БИНАРНЫЕ ОПЕРАЦИИ

 

ВЫРАЖЕНИЯ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MO

 

 

 

 

АрВыр

 

 

 

 

*

 

/

D

-

+

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ЛогВыр

NOT

 

 

 

AND

 

XOR

OR

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

РелВыр

~

 

 

 

 

 

 

 

 

#

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ДомВыр

 

 

 

 

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Терм

 

 

 

 

,

 

|

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Формула

 

 

 

 

&

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

СпПар

 

 

 

 

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

СпИнд

 

 

 

 

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Множ/СписЗнач

 

 

 

 

 

 

\

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В заключение отметим, что использование возможности программно-

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

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

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

4.4.Примеры программ на языке FLOGOL.

//Cистемный модуль, в котором определяются операции композиции

//направленных отношений.

MODULE RelComp

SecComp [9]_ _ {~ «0» ((, I 1.. «0» )[ I]x ) :

«1» ((, I 1.. «0» )[ I]x )} ;

ParComp [8]_# _ { (, I 1..«0» )[ I ]x ,(, J 1..«1» )[ J ] y :

«0» ((, I 1..«0» )[ I]x) ,«1» ((, J 1..«1» )[ J ]y)} ;

Concatenat ion [7]_ _ { (, I 1..«0» )[ I ]x :

«0» ((, I 1..«0» )[ I]x) ,«1» ((, I 1..«0» )[ I]x)} ; Unificatio n [6]_ _ { (, I 1..«0» )[ I ]x , (, J 1..«1» )[J] y :

(, K 1.. «0» )[ K ]z ? «0» ((, I 1.. «0» )[ I ]x)

(, K 1.. «0» )[ K ]z «1» ((, J 1..«1» )[ J ]y)} ;

Intersection [4]_ _ { (, I 1..«0» )[ I ]x : (, J 1.. «0» )[J] y ?

«0» ((, I 1..«0» )[ I]x) (, J 1.. «0» )[J]y

«1» ((, I 1..«0» )[ I]x)} ;

Union [3]_ _ { (, I 1.. «0» )[ I ]x :«0» ((, I 1.. «0» )[ I ]x) |

«1» ((, I 1.. «0» )[ I ]x) } ;

Inversion ~ _ { (, I 1.. «0» )[ I ]x : (, J 1.. «0» )[J ] y ?

«0» ((, J 1.. «0» )[J ] y ) (, I 1.. «0» )[ I ]x } ;

InputSet _ { (, I 1.. «0» )[ I ]x ?

«0» ((, I 1.. «0» )[ I ]x) (, J 1.. «0» )[J ] y} ;

OutputSet _ {: (, J 1.. «0» )[J ] y ?

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

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

«0» ((, I 1.. «0» )[ I]x ) (, J 1.. «0» )[J ] y}

//Cистемный модуль, в котором определяются часто используемые

//комбинаторные константы и конструкторы строк для стандартного

//набора из 256 символов.

MODULE Common ( RelComp)

ASSERTION

True {},

False False;

//

другой вариант определения пустого отношения арности 0,0 :

//

False {?x x};

(K ..)(

 

K

 

// определение константы

 

:

PREDICATE (K)

[K]Exist {(,I 1..K)[I]x};

 

K

 

// определение константы

 

:

TUPLE_TRANSPOSITION (K)

[K]Copy {(,I 1..K)[I]x : (,I 1..K)[I]x};

K

// определение константы :

RECONSTRUCTOR (K : K 2)

[K]Duble {(, I 1..K)[I]x: (, I 1..K)[I]x ,(, I 1..K)[I]x};

K

// определение константы :

TUPLE_SET (K) [K]Gen {: (, I 1..K)[I]x};

// определение константы K L :

(L ..) TUPLE_TRANSPOSITION (K L)

[K, L]Trans {(,I 1..K) [ I]x ,(,J 1..L) [ J ] y :

(, J 1..L) [ J ]y ,(,I 1..K) [ I]x} ;

K

// определение константы :

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

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

TUPLE_REFLECTION (K 2 : K)

[K]Unif {( , I 1..K)[I]x,(, I 1..K)[I]x : (, I 1..K)[I]x} ) ;

PROPERTY E1 [1]Exist ;

TRANSPOSITION C1 [1]Copy ;

// другой вариант определения C1 и Copy :

//TRANSPOSITION C1 {x:x} ;

//TUPLE_TRANSPOSITION (K)

//[K]Copy ( # I 1..K) C1 ;

RECONSTRUCTOR (1: 2) D1 [1]Duble ;

SET G1 [1]Gen ;

SUPER_RECONSTRUCTOR (2 : 2) T11 [1,1]Trans;

REFLECTION (2) U1 [1]Unif ;

OBJECT Empty ; // пустая строка

// присоединение I -го символа справа к строке:

( I .. 255) SUBSTITUTION [I]Char ;

TRANSITION Ch ( I ..255)[I]Char

END

//Домен, в котором определены базовые функции и базовые способы

//композиции функций в системе функционального программирования

//Дж. Бэкуса [11].

DOMAIN Backus(Com mon)

//Конструкторы данных:

OBJECT T,F, Null, Nil ;

SUBSTITUTION Succ ;

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