调用所有可能的向量组合的函数

Dim*_* K. 1 functional-programming clojure map

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

(defn gen [a b] (...))
Run Code Online (Sandbox Code Playgroud)

我想用类似的东西包装它

(defn gen-vector [a-vec b-vec] (...))
Run Code Online (Sandbox Code Playgroud)

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

(gen-vector [1 2] [3 4])
Run Code Online (Sandbox Code Playgroud)

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

(gen 1 3)
(gen 1 4)
(gen 2 3)
(gen 2 4)
Run Code Online (Sandbox Code Playgroud)

到目前为止我所拥有的是什么

(map #(gen %1 %2) countries fieldchar)
Run Code Online (Sandbox Code Playgroud)

但是,这并没有做到这一点,因为它只做1-3,2-4.有关如何实现这一点的任何想法?

问候,迪米

Mic*_*zyk 5

要获得懒惰的seq值(gen x y),请使用

(for [x x-vec
      y y-vec]
  (gen x y))
Run Code Online (Sandbox Code Playgroud)

如果gen是一个函数调用没有有用返回值的副作用,你需要替换fordoseq.

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


1还有一个用于过滤(:when)的迷你语言,早期停止循环(:while)并:let从绑定向量中引入本地绑定().有关(doc for)语法的概述,请参阅我最近的答案,以获取涉及:when和的示例:while.