clojure 如何同时对两个 seq 的元素执行函数?

标签 clojure

在 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/

相关文章:

java - 将所有对/api/v1/** 的请求传递给旧的 api 服务器

clojure - 重载的私有(private)函数在 clojure 中是私有(private)的

clojure - 如何在 Pedestal 中渲染 HTML 模板?

clojure - 将字符串转换为不在 clojure 命名空间中的函数

clojure - 可重用的 ClojureScript 库

clojure - 如何访问 LazySeq 值

java - Clojure编译并使用cygwin运行

clojure - 如何清理 clojure core.async channel ?

clojure - 记住 Clojure.core 有多大帮助

unit-testing - 如何对懒惰进行单元测试