北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

継続とcall/cc

フムフムヌクヌクアプアア本の 19.4 call/cc の節がきつかったので、メモしときます。

  • call/cc は、他言語の return を手続きとして作ってるような物。渡された手続きを呼べば、元の処理に復帰(次の処理にgoto)できる。
  • find-foldの呼び出し側で、大域脱出するための継続(cont0)を作って、それをbreakとして内部に渡す
  • 内部(breaker/cc)では、内部の処理の継続をnextに束縛し、先ほどのbreakを使って処理がこれ以上続かないように大域脱出する

要点はこれだけです。大域脱出用の継続と内部処理の継続を2つ作って、通常とは違う流れとなるようにコントロールしてるのがポイントです。