問題タブ [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 投票する
2 に答える
314 参照

ios - エスケープ クロージャを取るクロージャを、そのタイプのクロージャを受け入れる関数に渡す問題

古い迅速な世界(2.0だと思います)では、次のYコンビネーターの実装がありました

Y-comb を別の場所で呼び出して、次のように再帰クロージャーを作成します。

「sendData」通知のオブザーバーが応答を受信すると、Y コンビネーターと反復クロージャーを含むクラスに通知を送信するという考えです。「sendData」通知のオブザーバーのすべてのインスタンスがデータを受信すると、

f() を再度呼び出すことはありません。

さて、私の問題は、Swift 3.0 への変換により、次のように Y の定義で、「f」の型を @escaping であると明示的に宣言することを余儀なくされたことです。

その後、繰り返しクロージャーを同じタイプに変換しました。@escaping と @noescape の違いと、コードがそれを必要とする理由を理解しています。ただし、ビルドしようとすると、型が一致しないというコンパイル エラーが発生します。

テストするためだけに、同じエラーが発生する簡単なクロージャーの例を作成しました。

以下は問題ありませんが:

@escaping タグを使わずに、型へのキャストを強制するよう fixit から提案を受けました。これはコンパイルされますが、間違っているように感じます。そのキャストが実行時に実際に機能するかどうかを実際にテストしていません。

ここで何が欠けていますか?

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

functional-programming - StandardML の y コンビネータ

SML で y コンビネータを次のように記述できることはわかっています。最初に新しいデータ型を宣言して、循環性による型の不一致を回避します。

これで、y コンビネータを簡単に定義できます。

これで完了です。次のように使用できます。


私の質問は: SML で y コンビネーターを実装する他の方法はありますか?

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

kotlin - Kotlin を使用して Y コンビネータ関数を作成する方法は?

Kotlin FP (Lambda、関数) を使用して Y コンビネーター関数を記述できますか?

JS で:

コーヒーで:

これどうやってするの?

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

javascript - ES6 Yコンビネータを使用したJavascriptの有限回の再帰

Javascript での再帰に関する別の SO の質問への回答に出くわしました。これは、ES6 のファット アローを使用して、Y コンビネータを使用して ES6 で非常に簡潔なフォームを作成し、それを使用するのがうまくいくと思いました- その後 15 分ほどかかります。後でうーん、多分そうではない.

私はいくつかの Haskell/Idris の講演に参加し、以前にいくつかのコードを実行したことがあり、標準の JS に精通しているので、これを理解できることを望んでいましたが、単純な「n再帰を実行して返す」方法がよくわかりません。 " 行くはずであり、減分カウンターを実装する場所。

nDOM 要素のth親ノードの取得を簡単にしたかっただけで、このような単純なアプリケーションの例よりも詳細な説明ガイドがあるようです。

私が最初に見た例は次のとおりです

この最近の回答は次のとおりです。

...これは、内部関数が何であるかの例といくつかの出力例で示されていますが、U-コンビネーターを導入しても、これを明確にするのに実際には役立ちません。

最初の例でbは、私の場合に何が起こるかを理解することはできませんa。親ノードを返すために1 つの関数が必要であることはわかっています。

私は以下を思いついた:

しかし、その後、スペアが転がっているのをどうすればいいのかわからなくなりb、すべてを削除しようとしていて、気にしたことを忘れてしまいました。

私が知っている唯一の代替手段はチェーン...またはチートして文字列を呼び出しに変えることなので、私が望むのはpar関数時間を適用することだけです。n.parentNode.parentNode.parentNodeeval

関数型 JS に精通している人が、Y コンビネーターを使用してこのヘルパー関数を作成する方法について、ここでアイデアを得るのに役立つことを願っていますRecParentNode-ありがとう!