raiseとraise-continuableとwith-exception-handler。

Scheme(R7RS)の例外の発生とハンドラについてまとめた。
with-exception-handerで例外ハンドラを登録し、raise、raise-continuableで例外を発生させる。
raiseとraise-continuableの違いは、handlerを呼び出した後での処理に違いがある。

with-exception-handler

(with-exception-handler handler thunk )
  • thunk内で例外が発生するとhandlerが実行される。
  • handlerは1引数の手続き。
  • thunkは名前の通り引数なし手続き。


raise-continuable

(raise-continuable obj)
  • 例外を発生させ、objをhandlerに渡す。
  • handlerが実行し終えると、例外を発生させた場所に戻る。返り値はhandlerの結果。
  • 一度handlerを呼び出して戻ってきても、再度例外を発生させれば同じhandlerが立ち上がる。


raise

(raise obj)
  • 例外を発生させ、objをhandlerに渡す。
  • handlerが実行し終えると、二度目の別の例外が発生する。
  • 二度目の例外を補足するhandlerへ渡る値は規定されていない
  • 二度目の例外のhandlerは、一つ外側のwith-exception-handerで登録されたhandlerが呼び出される