PROG1, PROG2, PROGN - последовательное исполнение

(prog1 form1 form2 ... formn) => значение form1
(prog2 form1 form2 ... formn) => значение form2
(progn form1 form2 ... formn) => значения formn

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

progn может вернуть множественное значение.

Пример
(setq x 10)
(prog1 1 2 (incf x)) => 1
(prog2 1 2 (incf x)) => 2
(progn 1 2 (incf x)) => 13

Неявный progn - многие особые операторы, например, let и lambda, допускают в теле произвольное число форм и возвращают значение (или значения с помощью values) последней.

prog1 и prog2 обычно используются ради побочного эффекта.