1

自从我继续我同事的一个项目以来,我过去一周一直在使用 Clojure。我们正在使用 Clojure 生成一些文件。我正在尝试重构一些代码,因为他必须快速完成并硬编码大部分值。所以我有:

(defn gen [a b] (...))

我想用类似的东西包装它

(defn gen-vector [a-vec b-vec] (...))

gen_vector将成为我的“主要”,这意味着我将通过编写类似的东西来触发执行

(gen-vector [1 2] [3 4])

我希望得到所有的组合gen,比如执行:

(gen 1 3)
(gen 1 4)
(gen 2 3)
(gen 2 4)

到目前为止我所拥有的是

(map #(gen %1 %2) countries fieldchar)

但这并没有起到作用,因为它只做 1-3、2-4。关于如何实现这一点的任何想法?

问候, 迪米

4

1 回答 1

5

要获得 的值的惰性序列(gen x y),请使用

(for [x x-vec
      y y-vec]
  (gen x y))

如果gen是一个调用副作用的函数而没有有用的返回值,你会想fordoseq.

for并且doseq在它们的基本形式1中,为输入序列的笛卡尔积中的每个元组评估它们的主体。(map f xs ys ...)相比之下,以同步方式遍历序列,因此仅使用序列中匹配位置的元素元组。


1还有一种用于过滤 ( :when)、提前停止循环 ( ) 并从绑定向量内部:while引入本地绑定 ( ) 的迷你语言。:let请参阅有关(doc for)语法的概述,也许我最近的回答中涉及:when:while) 的示例。

于 2013-05-20T12:51:53.557 回答