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)
现在有人可以帮助我理解为什么它首先不起作用?
如果你使用: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)