Я новичок Clojure, используя Light Table, чтобы узнать макросы. Моя цель - преобразовать вектор карт в список инструкций def.Как вы преобразуете вектор карт в ряд символов, которые соответствуют определенной карте?
Я хочу, чтобы преобразовать следующую структуру данных:
(def label-data
[
{:label "lbl_first"}
{:label "lbl_second"}
{:label "lbl_third"}
{:label "lbl_fourth"}
]
)
... в следующих четкости утверждений:
(def L1 {:label "lbl_first"})
(def L2 {:label "lbl_second"})
(def L3 {:label "lbl_third"})
(def L4 {:label "lbl_fourth"})
Я знаю, как создать макрос, который генерирует один четкости заявление:
(defmacro def-label [num]
(let [ idx (dec num)
symb (symbol (str "L" idx))
datum (label-data num)
syntax `(def ~symb ~datum)]
syntax))
Когда я использую макрос ...
(def-label 2)
я могу увидеть символ, генерируемый макрос успешно решает ...
L2
Теперь я могу осмыслять создать макрос, который выглядит следующим образом:
(defmacro generate-def-statements-from [lbldata]
)
но я я не понимаю, как выполнить итерацию над макросом def-label 4 раза, чтобы сгенерировать требуемые несколько инструкций def. Может ли кто-нибудь показать мне лучшую технику для достижения этой цели?
Благодарим вас за советы и рекомендации, заранее.