我认为有一种方法可以做到这一点 - 我找不到确切的语法。
我想映射一个函数,该函数在大小为3的元组列表中包含三个参数。类似的东西:
(def mylist '((1 2 3)(3 4 5)))
(defn myfunc [a b c] (println "this is the first value in this tuple: " a))
(map myfunc mylist)
有人可以给我准确的语法吗?
答案 0 :(得分:4)
你只需要一对方括号来构造嵌套的列表元素。
(defn myfunc
[[a b c]]
(println "this is the first value in this tuple: " a))
但请注意,因为map
会返回lazy-seq,否则您可能无法获得此后的副作用,除非您强制使用doall
评估seq,或者检查REPL中的seq。
文档:http://clojure.org/special_forms#Special Forms--Binding Forms (Destructuring)
答案 1 :(得分:3)
d11wtq's answer是一个非常好的方法,除非你已经拥有了想要映射的功能,否则这是正确的方法。
因此,如果myfunc
是外部函数,最好使用apply
而不是编写额外的包装器:
(map (partial apply myfunc) mylist)