doseq
最初の要素の一部を反復して保持する場合の遅延シーケンスの動作を理解したいと思います。
(with-open [log-file-reader (clojure.java.io/reader (clojure.java.io/file input-file-path))]
; Parse line parse-line returns some kind of representation of the line.
(let [parsed-lines (map parse-line (line-seq log-file-reader))
first-item (first parsed-lines)]
; Iterate over the parsed lines
(doseq [line parsed-lines]
; Do something with a side-effect
)))
リストを保持したくありません。各要素で副作用を実行したいだけです。なくてfirst-item
も問題ないと思います。
プログラムでメモリの問題が発生しています。おそらく、シーケンスの開始時に何かへの参照を保持しているparsed-line
ということは、シーケンス全体が保存されていることを意味していると思います。
ここで定義されている動作は何ですか? シーケンスが保存されている場合、オブジェクトのコピーを取得し、シーケンスの実現された部分をガベージ コレクションできるようにする一般的な方法はありますか?