我想要生成一個相對較小的(1296元素)列表的基本上枚舉4個基地6位數從[0 0 0 0]到[5 5 5 5]爲什麼我得到一個函數StackoverflowError沒有明確的遞歸
[0 0 0 0], [1 0 0 0] ... [5 0 0 0], [0 1 0 0] ... [5 5 5 5]
目前我有什麼是:
(letfn [(next-v [v]
(let [active-index (some (fn [[i e]] (when (> 5 e) i))
(map-indexed vector v))]
(map-indexed #(cond
(> active-index %1) 0
(= active-index %1) (inc %2)
:else %2)
v)))]
(last (take 1290 (iterate next-v [0 0 0 0]))))
這工作,但它最終吹堆棧。
我在這裏做什麼導致StackOverflowError? 我怎樣才能構建我的代碼,使其「安全」? 有沒有更好的方式來做我想做的事情?
其他兩個類似的問題:http://stackoverflow.com/questions/2946764/recursive-function-causing-a-stack-overflow http://stackoverflow.com/questions/24958907/why-does-reduce-give -a-stackoverflowerror-in-clojure –