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

Материалы Всероссийской конференции

“Интеллектуальные САПР-97”

УДК 658.512

Бенеташвили А.Г.

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

Одной из важнейших характеристик любого языка программирования является область его применения. Она прежде всего определяется математическим аппаратом, лежащем в основе языка. Так, логика предикатов первого порядка, лежащая в основе языка Prolog, однозначно определяет класс задач, для решения которых эффективно использовать Prolog: построение экспертных систем, систем поддержки принятия решений, систем искусственного интеллекта. Лежащая в основе огромного количества языков теория алгоритмов, являясь практически универсальной, тем не менее накладывает ряд ограничений на возможность решения задач с использованием подобных языков.

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

Направленное

соответственно.

Одной из областей применения языка FLOGOL является реализация аппарата реляционной алгебры. В 1995 году в Лондонском Университете под руководством Дэйва Сандерса была создана система выражения запросов реляционной алгебры с использованием языка Miranda. Фундаментальное для реляционной алгебры понятие «кортежа» было представлено в языке не в качестве базового типа «кортеж», а как список ячеек, которые могли быть пустыми или могли представлять строковые, числовые, булевы константы или даты, что упростило реализацию.

Другим примером языка программирования, позволяющего использовать операции реляционной алгебры, является язык LIBRA [3]. Язык основан на алгебре бинарных отношений. Отношение в языке LIBRA не только рассматривалось как множество в обычном математическом смысле, но также и применялось к аргументу для получения одного или более результатов. Такая формулировка отношения аналогична применению функций в функциональных языках программирования.

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

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

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

Литература

1. Кутепов В.П., Фальк В.Н. Направленные отношения: теория и приложения // Известия РАН. Техническая кибернетика. - N 4, 5 1994.

2. Карпова Н.Н. Особенности написания функционально-логических параллельных программ с использованием языка FLOGOL. Известия ТРТУ. Тематический выпуск Интеллектуальные САПР «Материалы Всероссийской научно-технической конференции с участием зарубежных представителей «Интеллектуальные САПР-96». Таганрог: ТРТУ, 1997, № 3(6).

3. D. Saunders: Databases: Models, Modelling and Languages, QMW, Computer Science Department, 1995.

УДК 658.512

Карпова H.H.

Функциональное и процедурное программирование - пути объединения

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

Одним из классических примеров интеграции двух языков процедурного программирования является механизм, реализованный в Microsott С 6.0. Этот компилятор позволяет подключать библиотеки, написанные на языке Fortran (Microsoft Fortran 5.0). При создании иа языке Fortran описывалась специальная конструкция, реализованная только в данном компиляторе, под названием COMMON, в которую включались имена и типы всех переменных, используемых в данной библиотеке. При написании программы на С в ней описывалась структура, имя и поля которой полностью совпадали с описанием блока COMMON. Все функции из Fortran-библиотеки в С-программе помечались как внешние и начинались с ключевого слова Fortran. При компиляции С-программы компилятор пропускал все функции, начинающиеся со слова Fortran. Подключение библиотеки происходило при компоновке. Использование конструкции COMMON позволяло производить обмен данными через оперативную память, не прибегая к помощи файловой системы.

Созданная компанией Amzi! среда разработки позволяет совместное использование языков С и Prolog [1]. Данная система используется дня построения экспертных систем и систем автоматизированного проектирования. Prolog используется для описания внутренних логических связей экспертной системы, создания ее основы. С используется для создания пользовательского интерфейса и описания процедур, специфичных для конкретной экспертной системы. Использование языка Prolog позволяет значительно сократить длину исходного кода.

На кафедре ПМ МЭИЯУ/ разработана система функционально-логического программирования, ядром которой является язык FLOGOL [2]. Возможности языка FLOGOL могут быть существенно расширены с помощью интеграции его с языками процедурного программирования. Модуль, позволяющий осуществлять подобную интеграцию, является внешним по отношению к ядру системы. Подобные модули могут быть реализованы для интеграции языка функционально-логического программирования с различными языками процедурного программирования. В настоящее время ведется работа над реализацией подобного модуля для языка С.

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