1

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ということは、シーケンス全体が保存されていることを意味していると思います。

ここで定義されている動作は何ですか? シーケンスが保存されている場合、オブジェクトのコピーを取得し、シーケンスの実現された部分をガベージ コレクションできるようにする一般的な方法はありますか?

4

2 に答える 2