Я написал простой макрос для распечатки выражений и их результатов при отладке.Почему мой макрос не дает никакого вывода
(defmacro dbg-print
"Print out values or expressions in context"
[& rest]
`(let [symb-str# (map str '~rest)
symb-evl# (list [email protected])
pairs# (map #(str %1 %2 %3 %4) symb-str# (repeat ":") symb-evl# (repeat " "))
str# (reduce str pairs#)]
(printf "%s\n" str#)))
Это работает так:
(defn my-func1
[arg]
(dbg-print (+ arg 1)))
(my-func1 1)
Что дает выход
(+ arg 1):2
Тогда я столкнулся с проблемой, где я читал что-то из индекса:
(defn my-func2
[first & rest]
(dbg-print rest)
(nth rest 1))
(my-func2 1 2)
Это не дает никакого выхода вообще. Как может произойти ошибка ниже макроса dbg-print, остановить его от печати? Я также заметил, что ошибка исчезает, если я использую println и формат вместо printf в макросе. Но я все равно хотел бы знать, что происходит.