2012-03-25 12 views
6
に「unlazy」リストを作るには

私は最近、一種ここ挿入の非常に明確な実装があったことに気づい:事実のその連結に、メモリ・オーバーフローに苦しむClojureの

Insertion sort in clojure throws StackOverFlow error

  • 遅延リストに参加します。私が思っていた:

を我々はリストの「脱lazying」に適用することができますどのような戦略を、我々は大規模なコレクションで、より良いパフォーマンスをしたいとき?

+0

うーん...いくつかのグーグルの後、この質問への簡単な答えは、コレクションをラップする "doall"関数を使用することであることは明らかです。しかし、私は、ここに知っておくと便利かもしれないいくつかの落とし穴があるかもしれないと仮定します。 – jayunit100

答えて

5

doallは、レイジー評価を強制するためには間違いありません。

覚えておくべきもう1つの便利なことは、reduceが怠け者でないことです。したがって、これは、計算が進む前に、中間結果が評価され、単一の出力値に減少することを保証するために、大規模な計算で非常に役立ちます。

+0

私はdownvoteをよく理解していません。 'doall'は仕事を行い、' reduce'はベクトルに蓄積して解決策を提供します。これは直ちに解雇されるべきではありません。結果には、ランダムアクセスがあり、特定のアプリケーションでは面白いかもしれません。 (それは言った:結果のシーケンスの周りの 'vec'も同じ結果を与えるだろう) – kotarak

+0

私はすべてが動作することに同意する...実際には、私はこの質問を投稿した後、 。コメントしてください。 – jayunit100