在Clojure中,如何在包含從Java序列化的浮點值的文件上獲取惰性序列的方式是什麼? (我已經玩過with-open
的方法,基於線閱讀的例子,但似乎無法連接點來處理流爲浮動。)將Java浮點文件當作懶惰的Clojure序列處理
謝謝。
在Clojure中,如何在包含從Java序列化的浮點值的文件上獲取惰性序列的方式是什麼? (我已經玩過with-open
的方法,基於線閱讀的例子,但似乎無法連接點來處理流爲浮動。)將Java浮點文件當作懶惰的Clojure序列處理
謝謝。
(defn float-seqs [#^java.io.DataInputStream dis]
(lazy-seq
(try
(cons (.readFloat dis) (float-seqs dis))
(catch java.io.EOFException e
(.close dis)))))
(with-open [dis (-> file java.io.FileInputStream. java.io.DataInputStream.)]
(let [s (float-seqs dis)]
(doseq [f s]
(println f))))
如果您確定要使用整個seq,則不需要使用with-open。
如果您使用with-open,請仔細檢查您是否在其範圍之外泄漏了seq(或派生的seq)。
優雅。謝謝。 – Cumbayah 2010-06-03 07:49:03
好極了:它在我的腦海中啓發了懶惰seq的使用。它最終點擊。 – 2010-06-03 08:03:44
每行一個浮點數,或製表符分隔還是空格分隔?你能舉一些例子數據嗎? – 2010-06-02 21:14:53
說明:該文件由Java浮點數的二進制序列化(即簡單類型「float」)組成,它不被任何東西隔開。我想根據(可能非常大的)文件中的每個條目進行計算 - 想象一下,我想總結它們。即我只想在所有的值上都有一個懶惰的序列。 – Cumbayah 2010-06-02 21:36:25