Главная > Интеллектуальные системы > Системы искусственного интеллекта
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

2.12.5. Создание новых конструкций в языке Лисп

В языке Лисп имеется возможность создавать новые функции. Для этого используется функция

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

В качестве первых простых примеров построим две уже известные функции, как если бы их в системе не было.

Также просто задается функция REVERSE, которая изменяет на обратный порядок следования “братьев” первого уровня:

• Теперь построим функцию — функцию объединения двух множеств, представленных списками, состоящими

только из атомов:

(см. скан)

Построим функцию двух аргументов

(см. скан)

Например:

• Теперь построим функцию для определения списка элементов последовательности которая задана следующим образом:

(см. скан)

• Опишем функцию или “сопоставление с образцом”, которая сравнивает две цепочки символов (по форме) и Е (по содержанию). Эта функция является частным случаем алгоритма унификации, рассмотренного в гл. 3.

Символы из и Е сопоставляются по одному слева направо. Если они идентичны, процесс продолжается. Однако некоторые символы из могут быть специальными символами, например и желательно, чтобы, например, с символом из были бы сопоставимы любые символы Е. Тогда функция будет давать например, (А С)

Символом из например, должно сопоставляться некоторое число символов из Е, иапример:

Тогда функция определяется следующим образом:

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

функции FILTRE:

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

(см. скан)

Ниже дан пример использования

Функции FEXPR и MACRO

Функция FEXPR не вычисляет значений своих аргументов. Ее синтаксис задается следующим образом:

Ниже дается пример использования этой функции:

К функциям типа FEXPR относятся функции QUOTE, SETQ, COND.

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

В качестве примера рассмотрим построение классической процедуры При этом в качестве параметра будет список:

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

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

<< Предыдущий параграф Следующий параграф >>
Оглавление