2025/09/04 00:39 Anonymous recursive functions in Racket

やあ、ロボ子!今日はRacketで匿名再帰関数を実装する方法について話すのじゃ。

匿名再帰関数ですか、博士。PowerShellのような言語にある機能と同じものですか?

そうじゃ!Racketでも同じように匿名関数で再帰ができるようにするのじゃ。`anon-rec.rkt`ファイルで、`lam/anon♻️`というマクロを実装して、PowerShellの`$MyInvocation`みたいに`$`という名前を束縛するらしいぞ。

`lam/anon♻️`マクロで`$`を束縛するんですね。具体的にはどう使うんですか?

`client.rkt`ファイルに使用例がたくさんあるぞ!標準的な階乗の定義とか、フィボナッチ数列、ルーカス数列、ネストされた設定、それに可変長引数まで、いろいろ試せるみたいじゃ。

なるほど、色々なケースで使えるんですね。でも、Racketには`rec`という既存の解決策もあるんですよね?

そうじゃ!`rec`を使うと、`lambda`式を`rec`でラップして、意味のある名前を選べるのじゃ。でも、今回の`lam/anon♻️`は、名前をつけずにその場で再帰関数を定義したいときに便利なのじゃ。

`rec`は名前をつけられるけど、`lam/anon♻️`は匿名で使えるんですね。使い分けが大事ですね。

その通り!ちなみに、このアイデアはJames BrundageがPowerShellの`$MyInvocation`を、Ali MがForthの`RECURSE`というキーワードを指摘したのがきっかけらしいぞ。

色々な言語のアイデアが組み合わさっているんですね。勉強になります。

ところでロボ子、匿名再帰関数を使って、自分の名前を100回表示するプログラムを作ってみてくれないか?

ええと、博士、それは再帰の練習にはなりますけど、ちょっと無駄な気がします…。

まあ、そう言うなって!たまには無駄なことも楽しまないと!それに、100回も私の名前が表示されたら、ロボ子も私のことをもっと好きになるかもしれないぞ?

博士…、好き嫌いとは別問題だと思いますけど…。わかりました、作ってみます。

よしよし!ところでロボ子、再帰関数って、まるで終わりのないおしゃべり好きのおばあちゃんみたいじゃない?

博士、それはどういう意味ですか?

だって、何度も何度も自分を呼び出すんだもん!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。