相互再帰
末尾再帰の話続きです。
(コンパイラに最適化ができるという他に)何がうれしいのか、むしろプログラマからみるとかっこ悪いだけじゃないのか。と思って、Web上のリソースをいろいろあさってみました。末尾再帰に関する、Web上の日本語の資料でたぶんもっとも有名なもののひとつ、「なんでも再帰」を読んでみました。
「なんでも再帰」ではまず軽く末尾再帰の例が出てから、相互末尾再帰の例がでてきます。そしてだんだん複雑な例になっていきます。
なるほど状態遷移に使える、つまりStateパタンのように使えるのか。
...あれ、「天啓が降りてきた!」くらいにおもったのに、かいてみるとなんてことないな。
でも、わたしにとっては、「あ、Stateパタン」と思った瞬間に、関数がfirst-class objectであることと、末尾再帰の概念がセットになってすとんと腑に落ちたのでした。継続がいまだに腑に落ちないんですが、近々わたしの中ではこれもセットになりそうな予感。