Базовые функции обработки 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;