Базовые функции обработки s-выражений

      Комментарии к записи Базовые функции обработки s-выражений отключены
Функция Вызов Действие Пример использования
CAR (CAR список) Возвращает головною часть (CAR(1 234))
списка — его 1-й элемент Результат:1
CDR (CDR список) Возвращает хвостовую часть (CDR(! 234))
списка- все. кроме 1-го элемента Результат:(2 3 4)
CONS (CONS S-выра- Строит список из переданных в (CONS I (2 3 4))
жение список) качестве аргументов головы и хвоста Результат: (1234)
ATOM (ATOMS-выра- Предикат; проверяет, является ли (ATOM A) : t
жение) аргумент атомом, и возвращает либо t (ATOM (1 2 3)): Nil
(истина), либо Nil или ((ложь)
EQ (EQ символ Предикат: проверяет тождественность (EQ A A): t
символ) символов-аргументов, неприменим (EQ X (CAR (X Y Z))): t
для чисел
EQL (EQL число Предикат, проверяет тождественность (EQL 3.0 3.0): t
число) чисел одного типа
= (= число Предикат, проверяет тождественность
число) чисел различных типов (=30.3el):t
EQUAL (EQUAL число Аналогична EQL, (EQUAL(xyz)(xyz)):t
или список но, кроме того, проверяет идентичность
число или список) Списков
EQUALP (EQUALP Проверка наиболее общего равенства
объект объект)
NULL (NULL список) Проверка, является ли аргумент
пустым списком
NOT (NOT логическая Логическое отрицание
величина)
NTH (NTH n список) Выделение n-го элемента списка (NTH 2 (1 2 3)): 3
(индексы начинаются с 0)
FIRST Предикаты, выделяющие
SECOND Соответствующие элементы списка
LAST
LIST (LIST apr Строит из аргументов список (LIST a b (с)): (a b c)
арг2 …)

Отметим, что в программах на Лиспе надо тщательно отличать значения от их обозначений.

В Лиспе константы обозначают самих себя. Выражения типа (* 2 2) сразу вычисляются. Чтобы избежать нежелательного вычисления выражения используется функция QUOTE или знак апострофа (‘) перед выражением:

(* 2 2) : 4

‘ (* 2 2) :’ (* 2 2) – список

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

(SET ‘операции'(+ — */))

Знак ‘ используется для подавления вычисления аргументов функции SET. Функция SETQ не вычисляет значения 1-го аргумента (а 2-го вычисляет).

На значение символа можно сослаться, указав его без апострофа (‘).

Для занесения значений в ячейку памяти, связанной с символом, можно пользоваться обобщенной функцией присваивания SETF, размещающей значения в соответствующей ячейке памяти:

(SETF ячейка_памяти значение).

Переменная «ячейка_памяти» без апострофа указывает на ячейку памяти. Присвоение, выполняемое функциям» SET, SETQ и SETF, является побочным эффектом , этих функций, помимо того, данные функции возвращают присваиваемые значения.

ФОРМЫ. УПРАВЛЯЮЩИЕ КОНСТРУКЦИИ В ЛИСП-ПРОГРАММЕ

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

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

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

Работа с контекстом

• QUOTE или блокировка вычисления,

• вызов функции и лямбда-вызов,

• предложения LET и LET*;

Последовательное исполнение

• предложения PROG1, PROG2 и PROGN;

Разветвление исполнения

• условные предложения COND, IF, WHEN, UNLESS,

• выбирающее предложение CASE;

Итерации

• циклические предложения DO, DO*, LOOP, DOTIMES, DOUNTIL;

Передачи управления

• предложения PROG, GO и RETURN;

Статьи к прочтению:

JavaScript, урок 3: Функции. Замыкания.


Похожие статьи: