本文介绍了Clojure中的插入排序会抛出StackOverFlow错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
(defn insert [s k]
(let [spl (split-with #(< % k) s)]
(concat (first spl) (list k) (last spl))))
(defn insert-sort [s]
(reduce (fn [s k] (insert s k)) '() s))
(insert-sort (reverse (range 5000)))
堆栈溢出错误。我在这里做错了什么?
throws a stack over flow error. What am I doing wrong here?
推荐答案
与。 Concat构建了一堆嵌套的惰性序列,如(concat(concat(concat ...))),而不做任何实际工作,然后当你强制第一个元素所有 concat
必须立即得到解决,吹动堆栈。
Same issue as with Recursive function causing a stack overflow. Concat builds up a bunch of nested lazy sequences like (concat (concat (concat ...))) without doing any actual work, and then when you force the first element all the concat
s must get resolved at once, blowing the stack.
这篇关于Clojure中的插入排序会抛出StackOverFlow错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!