問題タブ [anonymous-recursion]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
5 に答える
627 参照

c# - 「匿名再帰」は .NET で機能しますか? モノでやる

数日前、「C# での匿名再帰」についてこのサイトにアクセスしました。この記事の主旨は、次のコードは C# では機能しないということです。

次に、カリー化とY コンビネーターを使用して C# の「匿名再帰」に戻る方法について詳しく説明します。これは非常に興味深いですが、私の日常のコーディングには少し複雑です。この時点で少なくとも...

私は自分の目で見るのが好きなので、Mono CSharp REPLを開いてその行に入りました。エラーなし。ということで、入りfib(8);ました。驚いたことに、うまくいきました!REPL は21!で応答しました。

これは REPL の魔法かもしれないと思ったので、「vi」を起動し、次のプログラムを入力してコンパイルしました。

それも完璧に構築され、実行されました!

Mac で Mono 2.10 を実行しています。現在、Windows マシンにアクセスできないため、Windows 上の .NET でこれをテストすることはできません。

これは .NET でも修正されていますか、それとも Mono のサイレント機能ですか? 記事は数年前のものです。

Mono のみの場合、次の就職の面接が待ちきれません。そこでは、.NET が機能しないという警告を提供する必要がある言語 (Mono C#) でフィビノッチ関数を作成するように求められます。まあ、実際、私は仕事が好きなので待つことができます。それにしても面白い…

アップデート:

fib名前付きデリゲートとして使用しているため、Monoは実際には「匿名」再帰を行っていません。私の悪い。nullMono C# コンパイラが代入前の値を想定するという事実は、fib以下に示すバグです。私が「コンパイラ」と言ったのは、.NET C# コンパイラがコードをコンパイルしなくても、.NET CLR は結果のアセンブリを問題なく実行できるからです。

そこにあるすべてのナチスのインタビューについて:

反復バージョンに置き換えることができます:

C# のような言語では再帰バージョンが非効率的であるため、これを実行する必要がある場合があります。メモ化の使用を提案する人もいるかもしれませんが、これは反復的な方法よりもまだ遅いため、単に気まぐれである可能性があります。:-)

ただし、この時点で、これは他の何よりも関数型プログラミングの宣伝になります (再帰バージョンの方がはるかに優れているため)。元の質問とはまったく関係ありませんが、回答の一部は重要だと考えていました。

0 投票する
1 に答える
389 参照

c# - Howto: C# の "letrec" (定義内のラムダ式呼び出し)

メソッド本体内でラムダ式として定義され、変数に割り当てられた階乗関数を考えてみましょう。

factfailまだローカル変数にバインドされていないため、これは失敗します。

関数自体を抽象化して、一種の修正点を追加する方法はありますか?!

長い話: 外部の状態を変更するという副作用を持つ再帰関数を作成する必要があります。したがって、そのメソッドをその外側の状態をキャプチャするラムダ式として記述しようとしています。

私はまだそれを書く方法をさまざまなスタイルで試しています.そして-すべての再帰呼び出しで同じである必要がある1つの辞書に加えて-私はできるだけ純粋に機能的で怠惰になりたいです。

相互データを減らすのに役立つので、LINQで遊んでいました。また、コードのどの部分を機能的なスタイルで表現できるかを理解するのにも役立ちます。

簡単に言うと、LINQ ステートメントの前にいくつかのヘルパー関数を定義できると便利です。ラムダ式を変数にバインドすることでそれを行いました。

また、ラムダ式を使用すると、メソッドへの参照を明示的に渡す必要なく辞書をキャプチャすることもできます。これは非常に優れています。

私が正しい軌道に乗っているかどうかはわかりませんが...

0 投票する
4 に答える
2422 参照

php - 無名関数による再帰

重複の可能性:
javascript: recursive anonymous function?
匿名再帰 PHP 関数

私は疑問に思っていました...無名関数で再帰を行うことは可能ですか?

1 つの例を次に示します。数字とスペースのみを含む 6 文字の長い文字列を取得する必要があります。唯一の規則は、スペースで開始または終了できないことです。それを確認し、それが発生した場合は、同じ匿名の関数で再帰を呼び出すだけです。どうやって!?

0 投票する
9 に答える
16291 参照

recursion - スキームでは、ラムダを使用して再帰関数を作成するにはどうすればよいですか?

私は Scheme クラスにいて、define を使わずに再帰関数を書くことに興味がありました。もちろん、主な問題は、関数に名前がない場合、その関数を呼び出すことができないことです。

私はこの例を見つけました:これは、ラムダのみを使用する階乗ジェネレーターです。

しかし、最初の呼び出し (lambda (x) (xx)) の意味さえ理解できません。そして、階乗を取得したい値をどこに入力しますか?

これは授業用ではありません。ただの好奇心からです。

0 投票する
2 に答える
499 参照

lambda - Y コンビネータを使用したリスト関数は再帰を行わないのはなぜですか?

注: これは一種の宿題であり、そうではありません。最終的な目標は、数値のリストとして関数に提供される一連の数値の累乗を生成する関数を作成することです。関数の再帰バージョンがありますが、ソリューション内の明示的な再帰関数 ( など) を同等のラムダのみの式に置き換えるいくつかの方法を見つける必要がありappendますmapm

そのため、小さな問題から始めて、それらをすべて組み合わせて完全な関数を作成したいと考えています。純粋なラムダ (Y コンビネーター) を使用して非再帰的な階乗関数を思い付くことができましたが、現在、リスト内のすべての数値を 2 乗する素敵な関数を考え出そうとしています。ジャンプする前に小さな問題を解決しようとしています。乗算再帰関数まで:

上記のコードは、その前に Y コンビネータが存在するにもかかわらず、再帰しません。適切なパラメータを内部の関数に渡す際に問題が発生していることは明らかです。アイデアはありますか?

0 投票する
3 に答える
1041 参照

haskell - Haskell の Y コンビネータ、無限型、匿名再帰

私は最大部分列和問題を解決しようとしていて、ネイトの解決策を思いつきました

ラッパー関数msssを呼び出すと、次に が呼び出さfれ、実際に処理が実行されます。解決策は良好で、正しく機能しています。なんらかの理由で、製品コードで最大部分列和問題を解かなければならない場合、それが私のやり方です。

しかし、そのラッパー関数は本当に私を悩ませます。Haskell では、プログラム全体を 1 行で書くことができるほど粘り強く、プログラムがほとんど 1 つの大きな式に過ぎないという点を真に強調する方法が気に入っています。そこで、余分な課題のためにラッパー関数を排除しようと考えました。

今、私は古典的な問題に遭遇しました: 匿名の再帰を行うには? 関数に名前を付けることができない場合、どのように再帰を行いますか? ありがたいことに、コンピューティングの父たちはずっと前に固定小数点コンビネーターを発見することでこの問題を解決しました。最も人気のあるものはY コンビネーターです。

Yコンビネーターをセットアップするためにさまざまな試みをしましたが、コンパイラーを通過できません。

ただ与える

から に変更 f (y y f)するf (y f)だけで

コンビネータを外部で定義するだけで別のアプローチを試みましたが、これはまだ機能せず、1 つの式でそれを行うという私の課題を実際には満たしていません。

私がしていることのどこが悪いのか分かりますか? 私は途方に暮れています。Haskell はそういうものばかりだと思っていたからです。無限のデータ構造を持っているのに、なぜ無限型に問題があるのでしょうか? 型付けされていないラムダ計算が矛盾していることを示したパラドックスと関係があると思います。よくわかりませんが。誰かが明確にできれば良いでしょう。

また、再帰は常にfold関数で表現できるという印象を受けました。折り目を使用するだけでそれを行う方法を誰かに教えてもらえますか? ただし、コードが単一の式であるという要件は依然として有効です。

0 投票する
1 に答える
406 参照

c# - C# 匿名再帰と Y コンビネーターのパフォーマンス

以下は、無名再帰の関数とテストです。1 つ目は真の Y コンビネータで、見栄えはよくシンプルですが、かなり遅いです。100万回の反復を実行するには、1000ミリ秒かかります。2 番目は c(c,item) のせいでかなり醜いですが、最初の 2 倍の速さで動作します。

コードをよりシンプルに、より柔軟に、より安定させる必要があります (再帰呼び出しが必要な場合は、一連の関数などを作成する必要はありません)。

匿名の再帰を整理するより良い方法はありますか?

0 投票する
2 に答える
1141 参照

php - CodeIgniter で再帰関数が失敗しました

再帰関数を使用してメニューをツリーに変換しています。データベースから取得した配列は次のとおりです。

上記の配列をこの関数に渡すことで、再帰関数を呼び出しています。

この関数の後に使用するdie();と、正しいメニューが表示されます。使用しない場合die();、ページの読み込みに失敗し、次のエラーが発生します。

コンテンツ エンコーディング エラー 表示しようとしているページは、無効またはサポートされていない形式の圧縮を使用しているため、表示できません。」

...出力は表示されません。ここに私の再帰関数があります:

0 投票する
1 に答える
303 参照

recursion - この length≤1 を複数回行う方法は?

The Little Schemerlength≤1という本の166 ページを 1 日かけて読みました。次のコードがあります。

lは次(apples)eternityとおりです。

166ページ(第4版)には、次のように記載されています。

mk-length一度応募するともらえるlength≤1

その後

これを複数回行うことはできますか?

しかし、取得するためにこれを行う方法がわかりませんかlength≤2