Я видел несколько вариантов следующего макроса регистрации кода:
(defmacro log
"for debugging, output code and code->val to stdout, returns val"
[code]
`(let [c# ~code]
(prn '~code)
(clojure.pprint/pprint c#)
c#))
однако, я не видел рекурсивную версию, которая заключает в себе все макросы или функциональные формы в теле кода. У кого-нибудь есть хорошая рабочая реализация?
EDIT:
Чтобы уточнить, возьмите, например, следующий код:
(map #(+ % 10) (range 5))
, включив это в макрос рекурсивного журнала:
(r-log (map #(+ % 10) (range 5)))
Макро-расширение этого должно быть:
(log (map #(log (+ % 10)) (log (range 5))))