Octaveの関数型プログラミングは大好きですが、実際には扱いにくいです。匿名の再帰関数を定義する最短の方法について疑問に思っています。
私はいくつかのアイデアを持っていますが、これらのアイデアを組み合わせてさらに短くする方法(または同様に短いがより汎用性の高い方法)があるかどうか疑問に思っています。この質問のために、再帰的にゼロまでカウントダウンしましょう(ペイロードをできるだけ単純に保つためです)。
私の推論が正しければ、次の例で使用した変数名は重複しません。目的の関数はでq(n)
、常にゼロを返します。i
は、カウンタ変数として使用され、のローカルスコープでf
呼び出した再帰関数g
ですf
。
44バイト、「のインライン定義f
」
q=@(n)(f=@(g,i){@()g(g,i-1),i}{~i+1}())(f,n)
44バイト、「の引数リスト定義f
」
q=@(n,f=@(g,i){@()g(g,i-1),i}{~i+1}())f(f,n)
44バイト、「の別個の定義f
」
f=@(i,g){@()g(i-1,g),i}{~i+1}();q=@(n)f(n,f)
41バイト、「戻り値として必要な関数」
f=@(g)@(n){@()g(g)(n-1),n}{~n+1}();q=f(f)
現在の「勝者」は、flawrによるこの答えに触発されています。ただし、これを行うためのさまざまな方法が広範に考えられるため、おそらく誰かがさらに短い方法の組み合わせを考えることができます。
もちろん、目標は「フル」機能のために39バイト未満にすることです。オンラインで試してください!