有没有(合理的)方法将此宏写为函数?
(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,...
形式为{{1}}。没有parens?
答案 0 :(得分:4)
我猜您应该使用apply
,assoc
将(peek v)
应用于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
。
{{1}}