в каком-то эпическом лиспотреде этот вопрос уже поднимался, однако однозначного вывода я что-то не припомню. зачем в CL вообще существует разделение макр и функций? почему функции не являются просто нормальными макрами (макрами нулевого уровня, т.е. неразворачиваемыми во время компиляции)?
и, несколько по касательной к теме,- какой bit syntax вы считаете наиболее удобным? C-style, или какой другой (например, Erlang'овый)?