■ [scheme] 再帰の美しい使い方 Webアプリなどで予測されにくいユニークなIDを作るとき、 「適当な乱数からIDを作って、万一被っていたら再試行する」という コードを書きますよね。 で、C言語とかだと for(;;){ } とか、do{ }while(); を使うんだけど、 Gauche本に乗っていた方法がこちら。 (define (make-session) (let1 sid (random-integer *max-id*) (cond [(hash-table-get *sessions* sid #f) (make-session)] ; 被ってたら、再試行する [else (let1 sess (make <session> :sid sid) ; さもなくば (hash-table-put! *sessions* sid sess) sess)]))) ここで再帰で