私はマクロを学ぶために 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 ステートメントを生成するために def-label マクロを 4 回反復する方法を理解していません。誰かがこの目的を達成するための最良のテクニックを教えてもらえますか?
事前にアドバイスとご指導をよろしくお願いいたします。