Глава 7
Управляющие конструкции

 7.1 Константы и переменные
  7.1.1 Ссылки на переменные
  7.1.2 Присваивание
 7.2 Обобщённые переменные
 7.3 Вызов функции
 7.4 Последовательное выполнение
 7.5 Установка новых связываний переменных
 7.6 Операторы условных переходов
 7.7 Блоки и выходы
 7.8 Формы циклов
  7.8.1 Бесконечный цикл
  7.8.2 Основные формы циклов
  7.8.3 Простые формы циклов
  7.8.4 Отображение
  7.8.5 Использование «GOTO»
 7.9 Перечисление элементов структур данных и побочные эффекты
 7.10 Возврат и обработка нескольких значений
  7.10.1 Конструкции для обработки нескольких значений
  7.10.2 Правила управления возвратом нескольких значений
 7.11 Динамические нелокальные выходы

Common Lisp предоставляет набор специальных структур для построения программ. Некоторые из них связаны со порядком выполнения (управляющие структуры), тогда как другие с управлением доступа к переменным (структурам окружения). Некоторые из этих возможностей реализованы как операторы; другие как макросы, которые в свою очередь разворачиваются в совокупность фрагментов программы, выраженных в терминах операторов или других макросов.

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

Локально определённые функция (flet, labels) и макросы (macrolet) достаточно универсальны. Новая функциональность макросимволов позволяет использовать ещё больше синтаксической гибкости.

Несмотря на то, что язык Lisp более функциональный (applicative), чем императивный (statement-oriented), он предоставляет много операций, имеющих побочные эффекты, и следовательно требует конструкции для управления последовательностью вызовов с побочными эффектами. Конструкция progn, которая является приблизительным эквивалентом Algol’ному блоку begin-end с всеми его точками с запятыми, последовательно выполняет некоторое количество форм, игнорируя все их значения, кроме последней. Много Lisp’овых управляющих конструкции неявно включают последовательное выполнение форм, в таком случае говорится, что это «неявный progn». Существуют также другие управляющие конструкции такие, как prog1 и prog2.

Для циклов Common Lisp предоставляет, как общую функцию для итераций do, так и набор более специализированных функций для итераций или отображений (mapping) различных структур данных.

Common Lisp предоставляет простые одноветочные условные операторы when и unless, простой двуветочный условный оператор if и более общие многоветочные cond и case. Выбор одного из них для использования в какой-либо ситуации зависит от стиля и вкуса.

Предоставляются конструкции выполнения нелокальных выходов с различными правилами областей видимости: block, return, return-from, catch и throw.

Конструкции multiple-value предоставляют удобный способ для возврата более одного значения из функции, смотрите values.