Gauche > Archives > 2012/09/09

2012/09/09 09:44:00 UTCshiro
#
何かする時に、それをしても安全かどうかチェックして、危険だったら何か調整してリトライする、ってコード、良く書くじゃん?
#
(define (何かする arg)
  (if (何かしても大丈夫? arg)
    (本当に何かする arg)
    (begin
     (ちょい調整 arg)
     (何かする arg))))
#
それまでリトライの無かったコードにリトライをつけるのに、こういうふうに書くと基本的に一個if式をつけるだけなんですんごく楽なんだけど、末尾呼び出し最適化が無いと予想外にスタックを消費しちゃって、「わざわざ」ループに書き直すハメに。こういうケースって再帰の方がずっと「自然」だとワシは思うのであった。
#
(あ、上の例はSchemeだけど、今書いてるコードはCL。要はやっぱりTCOないと辛いなあってだけ。)
2012/09/09 10:28:07 UTCshiro
#
Schemeだとnamed letでもすぐ書けるんだけどCLだと… tagbody&gotoはずいぶん古めかしいし。 RT: @dico_leque: (let retry () ...) みたいなのよく書く