在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个回答

4

您只需要在其中加入一对方括号以解构嵌套的列表元素。

(defn myfunc
  [[a b c]]
  (println "this is the first value in this tuple: " a))

请注意,由于map返回一个惰性序列,如果你不使用doall强制求值或者在REPL中检查序列,可能无法得到你的期望副作用。
文档: http://clojure.org/special_forms#Special Forms--Binding Forms (Destructuring)

3

d11wtq的回答非常好,这是正确的方法,除非你已经有一个你想要映射的函数。

所以,如果myfunc是外部函数,最好使用apply而不是编写额外的包装器:

(map (partial apply myfunc) mylist)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接