clojure - 将序列作为参数传递以代替多个参数

标签 clojure clojure-contrib

我/应该如何将单个序列作为参数传递给需要多个参数的函数?具体来说,我正在尝试使用 cartesian-product并向其传递一个序列(见下文);然而,当我这样做时,结果并不是我想要的。如果我无法传递单个序列作为参数,我/应该如何将序列分解为多个参数?谢谢。

(use '[clojure.contrib.combinatorics :only (cartesian-product)])
(cartesian-product (["a" "b" "c"] [1 2 3]))

结果:

((["a" "b"]) ([1 2]))

期望的结果

(("a" 1) ("a" 2) ("b" 1) ("b" 2))

最佳答案

apply 函数根据函数和包含函数参数的序列构建函数调用。

(apply cartesian-product  '(["a" "b" "c"] [1 2 3]))
(("a" 1) ("a" 2) ("a" 3) ("b" 1) ("b" 2) ("b" 3) ("c" 1) ("c" 2) ("c" 3))

另一个例子:

(apply + (range 10))

(range 10) 计算为序列 (0 1 2 3 4 5 6 7 8 9),然后构建此函数调用

(+ 0 1 2 3 4 5 6 7 8 9)

<小时/> 并根据大众需求返回:

for确实 for 函数很好地做到了这一点。

(for [x ["a" "b"] y [1 2]] [x y])
(["a" 1] ["a" 2] ["b" 1] ["b" 2])

关于clojure - 将序列作为参数传递以代替多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7745623/

相关文章:

clojure - 创建 deps.edn 文件时出现问题

json - 如何扩展 clojure.contribs json writer 以序列化其他类

clojure - 用于 Clojure 中的标识 monad

clojure - 为什么 `core.async/pipeline` 返回一个 channel ?

clojure - 循环移位嵌套向量

clojure - 将 Cider 连接到 Luminus +CLJS Figwheel repl

clojure - 何时使用 `zipmap` 何时使用 `map vector` ?

clojure - Clojure 中嵌套向量的映射函数

clojure - 构建 LISP 机器需要多少原语?十、七还是五?

Clojure:迭代集合图