2012-03-25 36 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