日曜プログラミング

休日趣味でやってるプログラミング関連記事をダラダラと

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:多分オブジェクトの参照なんだろうけど正確な所は自信なし