对于clojure中的循环

ash*_*ina 0 for-loop clojure

    n = (count somevector)        
   (foo [w] ( for [i (range n) 
                   j (range w)
                   :let [n (* i j)] 
                   :while ( < i j)
                  ] 
              (println n)))
Run Code Online (Sandbox Code Playgroud)

当我运行它.

=>(foo 10) ClassCastException clojure.lang.LazySeq无法施展clojure.lang.IFn HelloWorld.core /富

我真正想做的是有几个嵌套的for循环,并有一些ifs和其他内部做一些检查.

编辑::

事实证明,以下也会导致错误

(defn foo [arg]
 (      
      for [ i (range (count vector)) ]
      (
        for [j arg ]
        [i j]
        ) 

     ) ) 
Run Code Online (Sandbox Code Playgroud)

IllegalArgumentException不知道如何从以下创建ISeq:java.lang.Long clojure.lang.RT.seqFrom

编辑::

以下作品

(defn foo [arg]
  (def w arg) 
(for [ i (range (count vector)) ]
      (
        for [j (range v)  ]
        [i j]
        )
  )   )
Run Code Online (Sandbox Code Playgroud)

现在有人可以帮助我理解为什么它首先不起作用?

num*_*_cn 5

如果你使用:while,for-loop将返回null,因为第一个值是false, :when更好.

user=> (for [i (range 3) j (range 5)] [i j])
([0 0] [0 1] [0 2] [0 3] [0 4] [1 0] [1 1] [1 2] [1 3] [1 4] [2 0] [2 1] [2 2] [2 3] [2 4])
user=> (for [i (range 3) j (range 5) :while (< i j)] [i j])
()
user=> (for [i (range 3) j (range 5) :when (< i j)] [i j])
([0 1] [0 2] [0 3] [0 4] [1 2] [1 3] [1 4] [2 3] [2 4])
Run Code Online (Sandbox Code Playgroud)