問題タブ [y-combinator]

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 投票する
0 に答える
53 参照

swift - Y-Combinator を Swift に実装する

私は、Jim Weirich による次の講演を見ていました。

最終的に、5 までの階乗として機能するこの関数にたどり着きました。

次に何が起こるかというと、彼が を削除errorしても、彼のコードは引き続き機能します。

これは、Swift では、入力としてgenerator期待されているが型を取得しているため、コンパイラの失敗です。(Int) -> Intgenerator

代わりに、次のように Y コンビネータを実装できます。

しかし、上記の問題は、Y関数が次の行でそれ自体を参照していることです。

let recursiveWorker = Y(generator)

これは、この演習の目的全体を無効にしているように思えます。

私の質問は: Swift で講演と同じコードを実装することは可能ですか? つまり、クロージャ Y コンビネータを作成しますか? それとも、Swift の静的型付けのためにこれは不可能ですか?

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

c++ - 再帰的ファンクター/ラムダから派生したテンプレート パラメーターを必要とする宣言を管理するにはどうすればよいですか?

私は、再帰可能なラムダ自己スコープのクリーンできちんとした実装を構築しようとしています (これは基本的に Y コンビネーターですが、技術的には完全ではないと思います)。これは、他の多くのスレッドの中でも、このスレッド、このスレッド、およびこのスレッドに私連れて行った旅です。

問題の 1 つをできる限り簡潔に要約しました。テンプレート パラメーターとしてラムダを使用するテンプレート化されたファンクターをどのように渡すのですか?

上記のコードは機能しません。Visual Studio はf(b.evaluate(f)呼び出しで) パラメーターの型と一致しないと主張しています。

私の仮定は、auto & selfこれを機能させるのに十分賢くないということです。どうすればこれを回避できますか? これらが本質的に定義できない場合、これらのものをどのように保存して渡すのですか? これが、私が見た Y-combinator の実装の多くが奇妙な二重ラップを持っている理由ですか?

どんな助けや説明も大歓迎です。