将函数参数映射到Clojure中的嵌套列表中

时间:2013-12-09 11:38:54

标签: map clojure

我认为有一种方法可以做到这一点 - 我找不到确切的语法。

我想映射一个函数,该函数在大小为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)

有人可以给我准确的语法吗?

2 个答案:

答案 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)