(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 обычно используются ради побочного эффекта.