6
私はClojureに一連の単純な "def"式の評価を可能にするマクロを書き込もうとしています。私はマクロになるとn00bです。アイデアはマクロのargsをループする
(my-defs y1 1
y2 "taco")
が
(do (def y1 1) (def y2 "taco"))
次のコードは、2つのDEFS
いいです(defmacro my-defs
[& args]
`(do
(def ~(first args) ~(second args))
(def ~(nth args 2) ~(nth args 3))))
の特別な場合のために、これを達成するまで拡大すべきであるということですが、私は困っ一般化を持っていますこの。私は(partition 2 args)
の要素の束縛をループすることを含むいくつかの素朴なことを試しましたが、私はいつもごみを得ました(これはあまり具体的ではありませんが、ここで報告するのは多すぎると思います。どのようにこれらをループしてdefを評価するのですか?
P.S. マクロmy-defs
はおもちゃです。私が実際に最終的に達成したいのは、マルチメソッドインスタンスのインスタンスを生成するためのlittelヘルパーマクロです。現在、私は少し見苦しい少しの見た目のコードの大きい塊を持っています。
(defmethod f [A B] [x] "AB")
(defmethod f [A A] [x] "AA")
(defmethod f [C B] [x] "CB")
少し醜いです。代わりに
(defmethods f
[A B] [x] "AB"
[A A] [x] "AA"
[C B] [x] "CB")
のような何かを行うことができればいいです。
ありがとう、私は今defmethodsを書いた! –
このパターンは、 ''( '[xyz](パーティション3 args)] ...)'や '\'(do〜@(for ...) '。マップは物事の流れを崩壊させ、逆行と'〜@ 'を使うと、コードを混乱させるようになります。 – amalloy
@amalloy。もっとよく見える。 –