clojure.lang.LazySeq 无法转换为 clojure.lang.IFn 嵌套 for 循环 clojure

clojure.lang.LazySeq cannot be cast to clojure.lang.IFn nested for loops clojure

我是 clojure 和函数式编程的新手,所以我希望得到一些帮助。 :)

我想做的是:我想得到这个 [1 1 2] 从这个 "structure" [[1 0 1] [0 1 0] [0 0 1]] 因此我试图对三个向量的第一个元素、三个向量的第二个元素和最后三个向量的第三个元素得到一个包含这个总和的新向量。

我的代码如下:

(def matrix [[1 0 1] [0 1 0] [0 0 1]])
(def sum (atom 0))
(def sum-vector (atom []))
    (for [i (range 3)]                
       ((for [j (range (count matrix))]
               (reset! sum (+ @sum (nth (nth matrix j) i)))
                     ) 
               (reset! sum-vector (conj @sum-vector @sum))
               (reset! sum 0)
                 ))

但我得到这个异常:clojure.lang.LazySeq 不能转换为 clojure.lang.IFn ...我做错了什么?

问题是 ((for ....)) 那就是计算 (for ....) 表单,然后获取结果并执行它。 (for ...) 返回一个 LazySeq,而不是一个函数。

(apply map + [[1 0 1] [0 1 0] [0 0 1]])
;; (1 1 2)

如果您想要返回向量而不是 LazySeq:

(apply mapv + [[1 0 1] [0 1 0] [0 0 1]])
;; [1 1 2]