В книге «Let over lambda» автор в качестве примера рассматривает создание макросов чтения, автоматически создающих из регулярных выражений лямбда-формы, вызывающие соответствующие функции из cl-ppcre. Я долго думал и так и не понял, зачем в этом примере было match-mode-ppcre-lambda-form и subst-mode-ppcre-lambda-form делать макросами (а не функциями) - ведь всё, что они делают - это генерируют код, который возвращает соответствующую лямбда-форму, при этом аргументы макроса вычисляются строго 1 раз (для этого используется описанный ранее в этой книге макрос defmacro!). Чем макрос в данном случае лучше функции, возвращающей нужную лямбда-форму (такую же, как выполнение раскрытия макроса) типа такой к примеру:
(defun match-mode-ppcre-lambda-form (args)
`(lambda (str)
(cl-ppcre:scan
,(car args)
str)))
Может кто-нибудь прояснит ситуацию?