Рекурсивное макро-расширение работает путем многократного расширения формы, пока нет макроса для расширения.Это означает, что если вы хотите рекурсивно развернуть макрос, но игнорировать определенные формы, вам придется либо написать свой собственный расширитель, либо найти чужой.
Вот краткий пример:
(defn my-expander [form]
(cond (not (list? form)) (mexpand-1 form)
(= (first form) 'let) form
:else (map my-expander (mexpand-1 form))))
Пожалуйста, прости меня, если я допустил какие-либо ошибки.Я гораздо сильнее со Схемой и CL, чем с Clojure.
- Правка-- Обратите внимание, что вышеприведенная функция также не будет расширять подчиненные формы оператора let.