在Clojure中,在两个seq上并发迭代并在两个运行元素上调用函数的最佳方法是什么?例如:
(def a (range 3))
(def b (range 100 103))
(defn my-func [] ...) ;some custom code
Run Code Online (Sandbox Code Playgroud)
代码应该执行my-func 3次,如下所示:
(my-func 0 100)
(my-func 1 101)
(my-func 2 102)
Run Code Online (Sandbox Code Playgroud)
如何在不定义任何函数或宏的情况下实现这一目标?
Art*_*ldt 16
map 正是你需要的,它需要一个函数和任意数量的seqs,并按你的意愿调用它们.
(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")
Run Code Online (Sandbox Code Playgroud)
因为map如果你想要的功能实际上现在运行是懒惰:
(doall (map my-func a b))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3351 次 |
| 最近记录: |