Является ли это лишь немного историческим крутом, оставшимся с 1950-х годов, или есть какая-то причина синтаксически, почему тела множественного выражения (if) требуют (progn)? Почему вы не можете обернуть несколько выражений в набор круглых скобок, например, с помощью (let):
(if some-cond
((exp1) (exp2) (exp3)) ; multi exp "then"
(exp4)) ; single exp "else"
Кажется, было бы тривиально написать макрос, чтобы проверить каждое тело, чтобы увидеть его первым, если это список, а затем, если он есть, если его первый элемент также является списком (и, следовательно, не вызовом функции), а затем оберните свои подкомпоненты внутри (progn) соответственно.