gangueの日記: exception
日記 by
gangue
exception と tail recursion をなんとか
うまく同居させられないのだろうか?
簡単な例で言うと:
let rec readall ch acc =
try
let line = input_line ch in
readall ch (line::acc)
with End_of_file -> acc
みたいな風にした場合、tail recursive にしたつもりが、
exception のところがしっかり覚えられてしまうので入力が
長すぎると stack overflow になってしまう。
この場合はもっとも内側のループだけキャッチすれば良いはず
なので、なんとか最適化できないものなのか? 関数、もしくは
with の中に raise、があるかもしれないから...いつ
exception 投げられるかわからないから仕方ないのかなぁ。
imperative な命令を使わずにもっと良い書き方があるのだろうか。