問題タブ [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.
swift - Y-Combinator を Swift に実装する
私は、Jim Weirich による次の講演を見ていました。
最終的に、5 までの階乗として機能するこの関数にたどり着きました。
次に何が起こるかというと、彼が を削除error
しても、彼のコードは引き続き機能します。
これは、Swift では、入力としてgenerator
期待されているが型を取得しているため、コンパイラの失敗です。(Int) -> Int
generator
代わりに、次のように Y コンビネータを実装できます。
しかし、上記の問題は、Y
関数が次の行でそれ自体を参照していることです。
let recursiveWorker = Y(generator)
これは、この演習の目的全体を無効にしているように思えます。
私の質問は: Swift で講演と同じコードを実装することは可能ですか? つまり、クロージャ Y コンビネータを作成しますか? それとも、Swift の静的型付けのためにこれは不可能ですか?
c++ - 再帰的ファンクター/ラムダから派生したテンプレート パラメーターを必要とする宣言を管理するにはどうすればよいですか?
私は、再帰可能なラムダ自己スコープのクリーンできちんとした実装を構築しようとしています (これは基本的に Y コンビネーターですが、技術的には完全ではないと思います)。これは、他の多くのスレッドの中でも、このスレッド、このスレッド、およびこのスレッドに私を連れて行った旅です。
問題の 1 つをできる限り簡潔に要約しました。テンプレート パラメーターとしてラムダを使用するテンプレート化されたファンクターをどのように渡すのですか?
上記のコードは機能しません。Visual Studio はf
(b.evaluate(f)
呼び出しで) パラメーターの型と一致しないと主張しています。
私の仮定は、auto & self
これを機能させるのに十分賢くないということです。どうすればこれを回避できますか? これらが本質的に定義できない場合、これらのものをどのように保存して渡すのですか? これが、私が見た Y-combinator の実装の多くが奇妙な二重ラップを持っている理由ですか?
どんな助けや説明も大歓迎です。