let t = 関数型プログラミング言語ML 2
■ このスレッドは過去ログ倉庫に格納されています
0577デフォルトの名無しさん
NGNGLazyなリストだから、必要な部分だけ読み込まれ、大きさは問題にならないことがおおい。
もちろん、処理によるけれど。全体をみながらちょっとだけ置換するとかいう
ことならPackedStringみたいなmutableなものをつかわないといけない。
でもフィルタ的に全部書き換える/処理するようなものは、OK。
例えば、(Cleanスレに書き込まれたものだが)
csvファイルのnカラム目を全てとってきてprintするのに、
> s <- getContents
> putStr $ unlines $ map ((!! n) . cols) $ lines $ s
のようにできる。
これでファイルサイズに関わらず一定メモリで走るのはLazyなればこそだと思う。
# 当然入力が間欠的に供給されるパイプなんかでも問題ない。
# s: String、Lazyに読み込まれる。
# lines: lineに分割。 unlines: line を結合。
# cols: 各行を、各桁からなるリストに変換。
# a_list !! n : リストa_listのn番目の要素を返す。
■ このスレッドは過去ログ倉庫に格納されています