gaucheでファイルを読み込むやり方のメモ。

一行ずつ読み込んで処理する

( call-with-input-file "/Users/kanno/tmp/codes/a.scm" ( lambda ( in ) ( port-for-each ( lambda ( line ) ( print line )) ( cut read-line in ))))

一度に読み込んで処理する

Shiroさんより教えて頂いた。

@kanno_kanno タイミングが難しいので、with-input-from-fileとport->string-lseqの組み合わせになりますね。 — Shiro Kawai (@anohana) 2017年5月4日

@kanno_kanno 私の方も読み直してて気づきましたが、file->string-lseqというのがあるような書き方でしたね。仮想的にそういうものを作りたくてもファイルを閉じるタイミングが難しいので作れないから遅延リストを使うならport->string-lseqを使ってね、という意図でした。 — Shiro Kawai (@anohana) 2017年5月5日

( use file.util :prefix file: ) ( dolist [ line ( file:file->string-list "/Users/kanno/tmp/codes/a.scm" )] ( print line )) ( for-each ( lambda ( line ) ( print line )) ( file:file->string-list "/Users/kanno/tmp/codes/a.scm" ))

ちなみにリストではなく文字列そのまま受け取る場合は file->string というのもある。