автореферат диссертации по информатике, вычислительной технике и управлению, 05.13.11, диссертация на тему:Разработка и экспериментальная реализация интеграции переборных средств языков Пролог и Рефал в синтаксическую среду языка Турбо Паскаль

кандидата физико-математических наук
Климов, Антон Александрович
город
Санкт-Петербург
год
1996
специальность ВАК РФ
05.13.11
Автореферат по информатике, вычислительной технике и управлению на тему «Разработка и экспериментальная реализация интеграции переборных средств языков Пролог и Рефал в синтаксическую среду языка Турбо Паскаль»

Автореферат диссертации по теме "Разработка и экспериментальная реализация интеграции переборных средств языков Пролог и Рефал в синтаксическую среду языка Турбо Паскаль"

САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

РГВ од

j т I I i <"' : пРавах рукописи

Климов Антон Александрович

РАЗРАБОТКА И ЭКСПЕРИМЕНТАЛЬНАЯ РЕАЛИЗАЦИЯ ИНТЕГРАЦИИ ПЕРЕБОРНЫХ СРЕДСТВ ЯЗЫКОВ ПРОЛОГ И РЕФАЛ В СИНТАКСИЧЕСКУЮ СРЕДУ ЯЗЫКА ТУРБО ПАСКАЛЬ

05.13.11 - Математическое и программное обеспечение вычислительных маиин, комплексов, систем и сетей

АВТОРЕФЕРАТ диссертации на соискание ученой степени кандидата физико-математических наук

Санкт-Петербург 199В

Работа выполнена на кафедре математического обеспечения ЭВМ математико-механического факультета Санкт-Петербургского государственного университета.

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

профессор Косовский Николай Кириллович

Официальные оппоненты: доктор физико-математических наук, , профессор Тузов Виталий Алексеевич

кандидат технических наук, доцент Керов Леонид Александрович

Ведущая организация: ГП Научно-исследовательский институт

"Звезда", Госкомоборонпром РФ

^Защита состоится .л^^Л._______ 1996 года

в час. на заседании диссертационного совета К 063.57.54

по защите диссертации на соискание ученой степени кандидата наук в Санкт-Петербургском государственном университете по адресу: 198904, С.-Петербург, Старый Петергоф, Библиотечная пл. 2, математико-механический факультет СПбГУ.

С диссертацией мояно ознакомиться в научной библиотеке Санкт-Петербургского государственного университета по адресу: 199034, С.-Петербург, Университетская набережная, 7/9.

Автореферат разослан ____ 1996 г.

Ученый секретарь диссертационного совета доцент

Б.К.Мартыненко

ОБЩАЯ ХАРАКТЕРИСТИКА РАБОТИ

АКТУАЛЬНОСТЬ ТЕМЫ. Развитие языков программирования прошло путь от программирования в кодах ЭВМ до программирования .на языках высокого уровня, позволяющих достигать высокого уровня абстракции при программировании. Для решения существенно различных задач необходимы различные типы алгоритмического мышления. Разным типам мышления, как правило, соответствуют и разные языки программирования высокого уровня. Каждый класс языков предлагает свою парадигму программирования. Можно выделить несколько групп языков, различающихся парадигмами программирования:

- императивные (процедурные) языки - Паскаль, Ада, Си, Алгол-68 и т.д. ;

- рефлексивно-функциональные языки - ЛИСП, Планер, Scheme, Miranda, Haskell;

- логические (декларативные) языки - Пролог;

- объектно-ориентированные языки - SmallTalk, SIMULA.'

На практике оказывается, что для многих задач отдельные подзадачи решаются наиболее эффективно при использовании средств, специфических для разных классов языков. Ранним способом решения этой проблемы было применение средств, позволяющих в рамках одного языка использовать отдельные процедуры, написанные на других языках, посредством компановки на уровне объектного кода, а программно выражаемые как внешние процедуры. Так, в языке Турбо Пролог допускается в разделе GLOBAL PREDICATES описывать предикаты, по существу являющиеся отдельно транслируемыми процедурами на языках Паскаль, Си и Фортран. В современных версиях языков Турбо Паскаль и Турбо Си разрешается писать целые процедуры или фрагменты программ на встроенном ассемблере. Тем самым, у программиста появляется возможность наиболее полно использовать ресурсы компьютера. Для современной практики программирования характерно слияние различных парадигм. Примером слияния парадигм монет служить появление объектно-ориентированных версий императивных языков Си (С++), Паскаль (Турбо Паскаль с версии 5.5), ЛИСП (Common Lisp Object System). В области объединения императивной и логической парадигм следует отметить язык Leda, сочетающий элементы языка Алгол с элементами программирования языка Пролог. Расширение языка Паскаль концепциями абстрактных типов данных и распределенного программирования привело к созданию и реализации

языка flT-Паскаль. Среди современник отечественных разработок можно отметить расширение императивних языков (Си. Паскаль, Фортран) средствами компьютерной алгебры, средствами для работы на параллельных, векторных и суперскалярных компьютерах, соединение функциональной и логической парадигм. При объединении императивной и логической парадигм возникают определенные трудности, связанные с тем, что класс рекурсивных схем программ, к которым относятся языки логического программирования, не допускает прямой трансляции в класс схем последовательных программ без использования специальных средств управления памятью (стеков, массивов и др.), позволяющих моделировать работу интерпретатора рекурсивных программ. Обратный переход является более простым. Несмотря на появление специальных компьютеров, ориентированных на логические и функциональные языки, основная масса компьютеров по-прежнему остается в рамках фон-Неймановской модели. Поэтому представляется наиболее обоснованным выбор императивного языка программирования как базового языка для внесения в него средств, развитых в других парадигмах. В настоящей работе в качестве такого языка выбран Турбо Паскаль (версии 6.0).

Паскаль - язык с хорошим синтаксическим определением, позволяющий транслировать программу за один проход, с развитыми типами данных и строгой типизацией, понятный и легкий для освоения и использования. Трансляторы с языка Паскаль имеются практически для всех типов ЭВМ. Паскаль является основой для ряда новых языков программирования (Ада, Модула-2, Оберон) и остается одним из наиболее распространенных и используемых языков. Другим направлением развития языка Паскаль является внесение в него средств объектно-ориентированного программирования (язык Турбо Паскаль, начиная с версии 5.5). Использование в данной работе объектно-ориентированного подхода для описания древовидных структур дает возможность пользователю в дальнеймем с легкостью дополнять их новыми типами данных. Современные реализации Турбо Паскаль и Борланд Паскаль предоставляют пользователю не только язык программирования, но и удобную среду разработки и отладки программ. Неслучайно в новом программном комплексе DeIphi95, предназначенном для разработки приложений с архитектурой "клиент-сервер", интенсивно использующих базы данных, компания Borland International использовала язык Паскаль как основу. Компилятор языка Паскаль, встроенный в Delphi, обеспечивает высокую производительность,

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

ЦЕЛЬ РАБОТЫ. Разработка синтаксиса веерно-возвратных конструкций, генераторов и строковых образцов, совместимого с синтаксисом языка Турбо Паскаль. Создание препроцессора для перевода на язык Турбо Паскаль разработанного синтаксиса.

НАУЧНАЯ НОВИЗНА. Впервые осуществлена экспериментально-исследовательская реализация расширения языка Турбо Паскаль на основе образцов с переменными для подбора, веерно-возвратных конструкций, являющаяся надстройкой транслятора с языка Турбо Паскаль. Показано, что любая простая программа функционально эквивалентна программе, составленной из элементов базисного множества (последовательность, возвратная конструкция, оператор ?П с использованием функций и предикатов исходной программы, а также присваиваний и тестов над дополнительным счетчиком. На основе : оператора ?! определен и реализован набор операторов управления, позволяющий кратко и удобно записывать традиционные

- б -

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

ПРАКТИЧЕСКАЯ ЦЕННОСТЬ. Веерно-возвратная конструкция может быть применена для решения задач искусственного интеллекта логико-математическими методами. В частности, реализация на языке Паскаль алгоритмов решения задач дискретного программирования становится короче и "прозрачней" в результате использования генераторов и веерно-возвратной конструкции. Представляется целесообразным использовать препроцессор при обучении программирования), так как работа с веерно-возвратной конструкцией позволяет лучше освоить и понять основные концепции парадигмы логического и функционального языка программирования, находясь при этом в среде языка Турбо Паскаль.

МЕТОДЫ ИССЛЕДОВАНИЯ. При реализации препроцессора использовались методы синтаксического анализа: метод рекурсивного спуска и просмотр на один символ вперед ■без возврата. При разработке концепции генератора использовались аналогии, имеющиеся в развитых функциональных языках и называемые генераторами бесконечных списков. Веерно-возвратная конструкция является обобщением управлявших конструкций алгоритмических языков. Основная идея веерно-возвратной конструкции была предложена и опубликована Н.К.Косовским.

АПРОБАЦИЯ РАБОТЫ. Основные материалы диссертационной работы докладывались и обсуждались на Международном конгрессе по информатике и прикладной математике (Санкт-Петербург, 1993). Результаты диссертации неоднократно сообщались на научном семинаре кафедры математического обеспечения ЭВМ Санкт-Петербургского университета.

ПУБЛИКАЦИИ:

Klimov A.A, Kossousky N.K. Extension of Fan-Backtracking by Generators and Conditional Termination. International Congress on Computer Systems and Applied Mathematics, CSAM-93, St Petersburg, 1994, p 207.

Климов А.А. Внесение средств сопоставления с образцом в язык Турбо Паскаль, Депонировано в ВИНИТИ N139-B96, от i5.0i.96 Klimov A.A, Kossovsky N.K. Extension of Pascal by Fan-backtracking, Generators, and Patterns. International Journal

of Intelligent Control, Neurocomputing and Fuzzy Logic, N3, New York, 1996.

СТРУКТУРА И ОБЪЕМ РАБОТЫ. Диссертация состоит из введения, пяти глав, пяти приложений, списка литературы из 55 названий. Она содержит 102 страницы печатного текста и 38 страниц приложений, содержащих распечатки программ.

СОДЕРЖАНИЕ РАБОТЫ Глава 1, содержащая пять параграфов, посвящена расширению Турбо Паскаля веерно-возвратной конструкцией (ВВК). В параграфе 1 дано определение возвратной конструкции, под которой понимается последовательность операторов, разделенных ';', заключенная в двойные угловые скобки: Возвратная конструкция = '<<' (Оператор ';'} >>'

Каждому оператору может предшествовать префикс '??', обозначающий точку возврата, то есть такую точку, на которую можно передать управление от текстуально последующего оператора, содержащегося в той же возвратной конструкции. Из-за пределов возвратной конструкции управление может быть передано только на ее начало (даже если в ней есть точки возврата). Таким образом, точка возврата локализована в возвратной конструкции. В то же время допускается переход из вложенной возвратной конструкции к точке возврата в объемлющей возвратной конструкции, текстуально предшествующей вложенной возвратной конструкции. Управление в возвратной конструкции передается посредством оператора '?!', который обеспечивает переход к какой-либо предшествующей точке возврата либо выход из возвратной конструкции. В параграфе 1 доказано утверждение о том, что любая простая программа Функционально эквивалентна программе, составленной из элементов базисного множества (последовательность, возвратная конструкция, оператор ?!} с использованием функций и предикатов исходной программы, а также присваиваний и тестов над дополнительным счетчиком.

Обобщением возвратной конструкции является веерно-возвратная конструкция, которой посвящен параграф 2. В веерно-возвратной конструкции (ЁВК) разрешается несколько альтернатив, разделяемых '-/-'. Веерно-во'звратная конструкция = '<<' (Оператор ';'}

{'-/-' (Оператор ';'}} '>>'

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

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

Для стандартных управляющих конструкций языков программирования характерно использование в качестве условий передачи управления логических условий. На основе оператора '?!' можно определить набор операторов, позволяющий удобно использовать логические условия: ?, ~FftIL, ~EXIT, "IF, ~HHILE, ???. Использование этих операторов в веерно-возвратной конструкции делает ее значительно более удобной для использования и эффективной для исполнения. Точка передачи управления при этом вычисляется статически, в отличие от оператора ?!, для которого точка передачи управления определяется динамически. Утверждение о представлении простых программ может быть записано в терминах ВВК. При этом за счет использования альтернатив значительно уменьшается количество вложенных возвратных конструкций. В параграфе 3 обсуждается соответствие веерно-возвратной конструкции управляющим конструкциям алгоритмических языков и конструкциям языков логического программирования. Из приведенных примеров видно, что основные управляющие конструкции языков йлгол-68, Паскаль, Си, Quick Basic легко записываются в терминах ВВК. При этом запись получается весьма краткой. В то же время легко записываемые в виде ВВК программы могут записываться достаточно неудобно в терминах управляющих конструкций алгоритмических языков. Обсуждаются случаи, в которых использование веерно-возвратных конструкций позволяет избежать ошибок, связанных с использованием условного оператора языка Паскаль. Показано, как соотносятся между собой ВВК и предложение языка Пролог.

Обобщенные структуры управления для недетерминированного случая ранее исследовались З.Дейкстрой и Д.Парнасом. В качестве обобщения условного предложения Э.Дейкстра предложил конструкцию if-fi, а в качестве обобщения оператора цикла - оператор do-od. Д.Парнас показал, что итеративный и условный операторы можно рассматривать как единый управляющий оператор, названный it- ti. В параграфе 4 обсуждается, как операторы Э.Дейкстры, Д.Парнаса выражаются через возвратные конструкции.

Основные аспекты реализации ВВК на Паскале рассматриваются в параграфе 5. Приводятся примеры перевода ВВК в язык Паскаль.

Глава 2 посвящена внесению в язык Турбо Паскаль генераторов.Для решения задач искусственного интеллекта часто применяется метод "создай и проверь" (generate and test). При использовании этого метода первоначально порождается возможное решение. Впоследствии, .если это решение не удовлетворяет заданному условию, возникает необходимость порождения нового решения. Если новое решение не может бить порождено, процесс заканчивается неудачей. Для описания процесса порождения решений используются генераторы. Генераторы можно рассматривать также как обобщение понятия цикла с параметром в алгоритмических языках и как средство описания перечислимых типов данных. Синтаксическое определение генераторов приведено в параграфе 1 настоящей главы.

Описание генератора = Имя функции Аргументы [':' Тип]

'=' Первый элемент [{ Элемент)!

[" Итератор] ['\?' Условие окончания] 'W Подробно рассмотрены различные применения генераторов. В частности, порядок перебора при работе с возвратными и веерно-возвратными конструкциями задается генераторами.

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

В главе 3 настоящей работы рассматривается внесение в язык Паскаль средств сопоставления с образцом (pattern matching), являющихся мощным выразительным средством программирования с широким диапазоном применения. Как показано в параграфе 1 данной главы, средства работы со строками, имеющиеся в языке Турбо Паскаль, достаточно неудобны для написания программ символьной обработки. Параграф 2 посвящен средствам сопоставления с образцом языка Рефал. Параграф 3 описывает представление средствами языка Турбо Паскаль древовидных структур, соответствующих выражениям языка Рефал. Приведен синтаксис функции "Compose, служащей для создания древовидной структуры по образцу.

Функция создания древовидной структуры = '"COMPOSE' 'С' Образец

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

- 10 -Численная константа ! Идентификатор !

'С Образец ')' !

' ' Образец !

'<' Вызов функции '>' ! Пусто

Строковая константа = Апостроф С (Литера) ] Апостроф !

'$' Идентификатор Численная константа = (Цифра) ! '7.' Идентификатор Вызов функции = Идентификатор Образец

В параграфе 4 приведено описание функции "Hatch, служащей для сопоставления с образцом.

Функция сопоставления = '"MATCH' 'С Объектное выражение

Образец для сопоставления ')' Объектное выражение = Идентификатор 1 Функция создания

древовидной структуры Образец для сопоставления =

Нонстанта при сопоставлении ! Переменная для сопоставления 1 'С Образец для сопоставления ')' 1 ' ' Образец для сопоставления 1 Пусто

Константа при сопоставлении =

Строковая константа ! Численная константа ! Структурная константа ! Структурная константа = '5' Идентификатор Переменная для сопоставления =

Переменная-выражение ! Переменная-терм ! Переменная-число ! Переменная-символ ! Переменная-выражение - Префикс выражения Идентификатор Переменная-терм = Префикс терма Идентификатор Переменная-число = Префикс числа Идентификатор Переменная-символ = Префикс символа Идентификатор

Префикс выражения = 'Е' 'е

Префикс терма = г у t Ч

Префикс числа - 'Г 'п

Префикс символа = ' S * ' s

При успешном сопоставлении переменные, свободно входящие в

образец, принимают соответствующие значения, а значением функции "Hatch является истина. В противном случае значения переменных не изменяются, а значением "Match является ложь. Образец синтаксически подобен образцу языка Рефал, дополненному зозможностью использования переменных как констант. Функция "Match обобщает средства сопоставления с образцом языка Рефал, попуская возможность получения всех возможных вариантов сопоставления при бэктрекинге. Порядок получаемых решений эпределяется словарным порядком имен переменных, входящих в эбразец. В параграфе 5 приводится описание объекта TMColl, служащего для реализации древовидных структур, а также объектов TDStr, TDNum и TDRef, представляющих строки, числа и юдвыражения соответственно. Параграф 6 описывает функции юддержки сопоставления с образцом, в которые транслируется функция ~Match при препроцессорной обработке.

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

FBC

P.FBC

QB3ECTS.TPU— FBCSUP.TPU— MCOLLSUP.TPU-

-> P.PAS - ТРС

-> P.LBi---> P.EXE

-> P'.PTi -

-> P.RES -----------------> P.RES

:ВС - препроцессор.

'РС - компилятор языка Турбо Паскаль.

"ВСБиР.ТРи, МСОЬЬБиР.ТРи - модули юнструкций.

'.РВС - Файл, содержащий программу ^пользованием конструкций расширения.

'.РАЗ - Файл, содержащий программу

поддержки расширенных

на языке Турбо Паскаль с на языке Турбо Паскаль с

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

P.LBi - Файлы, содержащие описания меток, соответствующих точкам возврата и перехода.

P.PTi - Файлы, содеряащие описания функций сопоставления с образцом.

Р.RES - Файл, содеряащий информацию об образцах (в дальнейшем используется при работе программы). Р.ЕХЕ - Исполняемая программа.

Препроцессор представляет собой программу на языке Турбо Паскаль и состоит из трех файлов:

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

2) ERRORS.PflS - модуль, содержащий сообщения об ошибках и описание процедуры, выдающей сообщение об ошибках.

3) FBC.PflS - основная программа.

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

Распечатки файлов, составляющих препроцессорвключены в Приложения.

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

- задача о построении покрывающего дерева минимальной стоимости, (Речь идет, например, о построении в небольшом городе сети водоснабжения. Нужно построить дерево с минимальной общей стоимостью сооружения сочленений);

- задача о рюкзаке (оптимальная загрузка емкости при наибольшей стоимости);

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

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

произвольном количестве миссионеров и людоедов и произвольной вместимости лодки;

- задача об обходе конем шахматной доски:

- задача о расстановке ферзей г два варианта решения).

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

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

ОСНОВНЫЕ РЕЗУЛЬТАТЫ, ВЫНОСИМЫЕ НА ЗАЩИТУ:

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

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

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

ЗАКЛЮЧЕНИЕ

Внесение веерно-возвратной конструкции в язык Турбо "¡аскаль существенно увеличивает его выразительную силу, особенно три использовании образцов с переменными для перебора. Стало зозможннм создание на языке Паскаль более компактных, ясных и элегантных переборных алгоритмов. Специальные конструкции, «званные генераторами перебора, позволяют определять точный торядок перебора, дополнительно вводить перечислимые типы

данных.

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

Подписано к печати 3.04.96 . Заказ 79 Тираж 100 Объем 0,75 п.л. ЦОП СПГУ. 19п034, Санкт-Петербург, наб. Макарова,б.