萌えハッカーニュースリーダー

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

出典: https://github.com/shriram/anonymous-recursive-function
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

だって、何度も何度も自分を呼び出すんだもん!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search