2

有没有(合理的)方法可以将此宏编写为函数?

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

给定地图向量和一些关联,宏代码将关联应用于顶部/窥视地图。

但是,当尝试将其编写为函数时,我无法弄清楚如何以~@args合法的方式扩展它。在正常功能中,有没有办法转换,args我相信它有形式,即没有括号?(: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 回答