在 Clojure 中,同时迭代两个 seq 并在两个正在运行的元素上调用函数的最佳方法是什么? 例如:
(def a (range 3))
(def b (range 100 103))
(defn my-func [] ...) ;some custom code
代码应该执行 my-func 3 次,如下所示:
(my-func 0 100)
(my-func 1 101)
(my-func 2 102)
如何在不定义任何函数或宏的情况下实现这一目标?
最佳答案
map
正是您所需要的,它需要一个函数和任意数量的 seq,并按照您的意愿调用它们。
(def a (range 3))
(def b (range 100 103))
user=> a
(0 1 2)
user=> b
(100 101 102)
user=> (defn my-func [a b] (str a ":" b))
#'user/my-func
user=> (my-func 1 2)
"1:2"
user=> (map my-func a b)
("0:100" "1:101" "2:102")
并且因为如果您希望该函数现在实际运行,则 map
是惰性的:
(doall (map my-func a b))
关于clojure 如何同时对两个 seq 的元素执行函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9121576/