Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Spec_Mov_3k_4k_Lect.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.46 Mб
Скачать

Образцы с предикатами

Сопоставители можно совершенствовать далее, используя форму, дающую возможность наряду с переменными и некоторыми константными образцами, применять предикатные образцы. Например, можно ввести форму следующего образца (p? pr), где pr – функция-предикат с одним аргументом, которая получает в качестве аргумента текущий элемент образца. Если предикат истинен, то считается, что сопоставление успешно. Сопоставитель, соответствующий предикатному образцу, можно определить следующим образом:

(setf (get 'p? 'matcher) '(lambda (m h pr pairs)

(if (funcall pr (car h))

(match1 (cdr m) (cdr h) pairs)

nil))

)

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

Продукционное и логическое программирование в Лисп-системах

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

Объектное программирование

Наиболее абстрактную и многообразную из рассмотренных до настоящего момента моделей программирования и вычисления предлагает объектное программирование (ОП). В ОП обобщаются свойства функционального и операторного подхода, а также программирования, управляемого данными и событиями. Одной из первых систем подобного типа вслед за Смолток является система Flavors, включенная в Зеталисп. Определение класса в системе Flavors выглядит следующим образом:

(defflavor класс (свойства)

(надклассы)

режимы)

где класс – атом, определяющий имя класса, свойства – список имен переменных экземпляра класса, режимы – указываются ключи :gettable-instance-variables или :settable-instance-variables, которые приводят к автоматической генерации системы методов вида :имя или :set-имя для чтения значений переменных или присваивания им новых значений.

В системе Flavors применяется множественное наследование. В определении метода указывается класс, которому будет принадлежать метод, тип метода, устанавливающий пред- и пост- «демоны» для метода, селектор, используемый для вызова метода, лямбда-список и тело метода. «Демоны», сопоставленные методу, вызываются непосредственно перед вызовом метода или сразу после его выполнения.

К удачным воплощениям ОП в языках функционального типа следует отнести, также, систему LOOPS Интерлиспа и CLOS для Common Lispa. В Лекции 11 рассмотрена объектная модель внедренная в диалект Лиспа Xlisp.

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]