【发布时间】:2022-02-02 19:53:46
【问题描述】:
在 Clojure 中创建可变参数“for”的好方法是什么?
我写了这个:
(defmacro variadic-for
[f colls]
(let [bindings (map (fn [coll] [(gensym) coll]) colls)]
`(for ~(vec (apply concat bindings))
(~f ~@(map first bindings)))))
所以我可以这样使用:
(variadic-for + [[1] [2] [3 4]])
结果将是所有可能的总和,其中每个给定集合代表该绑定的可能值。
有没有更好的方法来做到这一点?除了“for”之外,我不知道 Clojure 核心中用于以这种方式创建所有排列的任何内容。
【问题讨论】:
-
你能澄清一下想要的结果吗?是
[6 7]吗?另外,用例是什么?
标签: clojure list-comprehension variadic