2012-03-25 117 views
6
制作清单“unlazy”

最近我注意到,有一个非常明确的实施插入排序位置:Clojure中

Insertion sort in clojure throws StackOverFlow error

  • 从内存溢出受苦,因为这样的事实,CONCAT懒洋洋地加入名单。我想知道:

当我们希望在大型集合上获得更好的性能时,我们可以应用什么策略来“拉扯”列表?

+0

嗯...经过一些更多的使用google搜索后,清楚地知道这个问题的简单答案是通过使用“doall”函数来包装集合。不过,我认为这里可能有一些陷阱,这可能对我们有所帮助。 – jayunit100 2012-03-26 00:18:41

回答

5

doall对于强迫懒惰评估肯定很好。

另一个有用的事情要记住的是,reduce是非懒惰的。因此,在计算过程进行之前,这对于确保中间结果得到评估并减少到单个输出值的大型计算非常有用。

+0

我不太明白downvote。 “doall”将完成这项工作,而“减少”累积成矢量也提供了一个解决方案,不应立即解雇。结果具有快速的随机访问,这对于某些应用可能是有趣的。 (也就是说:围绕结果序列的'vec'也会给出相同的结果。) – kotarak 2012-03-26 06:27:12

+0

我同意所有的都会工作......事实上,它的确行得通,我发布这个问题之后试过了,关于其他引用的帖子。请给出意见。 – jayunit100 2012-03-26 09:17:06