Clojureの遅延シーケンスのファイル出力
小ネタ。
Clojure では何気に使ってる関数で返されるのが遅延シーケンス(LazySeq)な事は良くある。
REPL では LazySeq を勝手に具現化してくれるのだが、ここで遅延シーケンス foo-seq をファイルに吐き出したくて以下のように spit としても、
(spit "some.file" foo-seq)
some.file に吐出される中身は以下のようになってしまう。*1
clojure.lang.LazySeq@90b0662a
遅延シーケンスの中身を全て評価して中身を吐き出したい場合は、
(spit "some.file" (into [] foo-seq))
と into をかましてやると良い。
もちろん、into に渡される遅延シーケンスの全体がやたら大きなものじゃないか、無限遅延シーケンスでないと言う前提とはなるが。
*1:多分オブジェクトの参照なんだろうけど正確な所は自信なし