2

このマクロを関数として書く(合理的な)方法はありますか?

(defmacro assocTop
          [v & args]
          `(push (pop ~v)
                 (assoc (peek ~v) ~@args)))

マップのベクトルといくつかの関連付けが与えられると、マクロコードは関連付けをトップ/ピークマップに適用します。

しかし、それを関数として書き込もうとすると~@args、正当な方法でを拡張する方法がわかりません。通常の関数では、フォームをargs持っていると私が信じている、つまり、parensなしに変換する方法はありますか?(:a 3 :bb 44 :cd 90,...):a 3 :bb 44 :cd 90,...

4

1 に答える 1

4

applywhich will apply assocto (peek v)and expand を使用する必要があると思いますargs

(defn assocTop
  [v & args]
  (push (pop v)
        (apply assoc (peek v) args)))
(=
  (assocTop [{:a :b} {:c :d} {:e :f, :g :h}] :e :z)
  [{:a :b} {:c :d} {:g :h, :e :z}]) ; => true
于 2012-10-20T08:43:33.740 に答える