パスワードを忘れた? アカウント作成
740077 journal

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 な命令を使わずにもっと良い書き方があるのだろうか。

typodupeerror

UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである -- Dennis Ritchie

読み込み中...