#CSVの読み込みをジェネレータで書けるんじゃないかなあと、いろいろ試して見ました。(速度については・・・・・orz) gconcaternateの逆のような処理なんですけれど。これをジェネレータでなく仮想ポートでやればどうかなとか考え中です。 https://gist.github.com/yamasushi/5693264 #ジェネレータ的にはどうかという動きなのですが、ジェネレータをジェネレータに分割して、分割したジェネレータを読み込むことで、もとのジェネレータを呼んでいくというか。分割したジェネレータを全部よまないとダメという仕様。
#(もとの動機はCSV読み込みのlistにデータを詰めているところを、ジェネレータ的に書けるかなとおもっていたのですが、ちょっと甘かった。)
#仮想ポートでやってみたのですが、性能はよろしくないです。 https://gist.github.com/yamasushi/5693628 仮想ポートはコストが高いのですね。 #ポートのバッファを区切り文字で区切って、仮想的に複数のポートがあるように見せる、という狙いだったのですが・・・・
#仮想ポートはいくつもの抽象化レイヤに包まれてますからね。文字のリストを作って文字列にする、って一見無駄なようですが、コンスセルのアロケートってフリーリストから取ってくるだけなんで(後でgcの負担が増えるとはいえ)、実はかなり軽い処理の部類に入ります。
#csvで#\returnを処理していないのですが、大丈夫なのかなと少し考えました。read-charはMSの改行を処理しないようですし。
#read-lineの低レベル版で、一行文だけの仮想ポートを返す、みたいな処理があるといいのかしら?とか。
#あ、char-whitespace?が処理しているということでしたか。なるほど。