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.