我是使用 Light Table 学习宏的 Clojure 新手。我的目标是将映射向量转换为 def 语句列表。
我想转换以下数据结构:
(def label-data
[
{:label "lbl_first"}
{:label "lbl_second"}
{:label "lbl_third"}
{:label "lbl_fourth"}
]
)
...进入以下 def 语句:
(def L1 {:label "lbl_first"})
(def L2 {:label "lbl_second"})
(def L3 {:label "lbl_third"})
(def L4 {:label "lbl_fourth"})
我知道如何创建一个生成单个 def 语句的宏:
(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 语句。有人可以向我展示实现这一目标的最佳技术吗?
事先感谢您的建议和指导。