問題タブ [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.
function - 「コンビネータ」の適切な説明 (数学者以外向け)
「コンビネーター」(Yコンビネーターなどであり、会社ではありません )について適切な説明を受けた人はいますか?
再帰と高階関数を理解しているが、理論や数学のバックグラウンドが強くない実用的なプログラマーを探しています。
(注:私はこれらのことについて話していること)
c++ - C++ の固定小数点コンビネータ
固定小数点コンビネータ ( C++のyコンビネータなど) を使用する実際の例に興味があります。実際のライブ コードで卵またはバインドで固定小数点コンビネータを使用したことがありますか?
この例は卵で少し濃いことがわかりました:
これがどのように機能するか説明できますか?
おそらくこれよりも依存関係が少ない bind を使用した簡単な例はありますか?
python - Pythonでラムダ関数を再帰的に呼び出すことはできますか?
通常の関数には、その定義にそれ自体への呼び出しを含めることができますが、問題ありません。ラムダ関数には参照する名前がないという単純な理由で、ラムダ関数でそれを行う方法がわかりません。それを行う方法はありますか?どのように?
functional-programming - Y-Combinatorの実用例
私は最近関数型プログラミングについて少し読んでいて、Y-Combinatorを理解しようとしています。Y-Combinatorを使用して、再帰を直接サポートしていない言語で再帰を効果的に実装できることを理解しています。ただし、私が使用する可能性のあるすべての言語はすでに再帰をサポートしているため、そのためにY-Combinatorを使用することがどれほど役立つかはわかりません。
私が見逃しているY-Combinatorの使用法のより実用的な例はありますか?誰かが実際に実際の製品コードで使用したことがありますか?または、Y-Combinatorを使用しているのは、本当に気が遠くなるようなアカデミックなエクササイズです(かなりクールなエクササイズですが)。
clojure - 固定小数点コンビネータの使用? ここでスタック オーバーフローが発生するのはなぜですか?
私は何かについて混乱しています。不動点コンビネータを使用して、無限回の適用後に数学的に収束するシーケンスの不動点を評価する方法を示す例を (Clojure で) 生成したかったのですが、実際には有限回のステップ後に収束します。浮動小数点の有限精度に。ここで何かが足りないようです。
私はそれから得ることができます
このスタック オーバーフローがわかりません。より一般的には、私の以前の投稿に関連して、この方法でシーケンスの不動点を近似するために使用できる不動点コンビネーターの「正しい」バージョンを誰かが提示できるかどうか疑問に思っています。
recursion - Clojureで2つの引数を持つ再帰関数にY-Combinatorを適用しますか?
Clojure で factorial や fibonacci などの単一の引数関数に対して Y-Combinator を実行することについては、十分に文書化されています: http://rosettacode.org/wiki/Y_combinator#Clojure
私の質問は、たとえば、このゲッターなどの 2 つの引数関数に対してどのように行うのですか?
(ここでの前提は、この問題を再帰的に解決したいということであり、この非慣用的な clojure コードは別の理由で意図的に存在するということです)
[非 y コンビネーター バージョン]
f# - F# で固定小数点演算子 (Y コンビネーター) をどのように実装しますか?
F# を使用してラムダ計算を作成しています。私は現在、固定小数点演算子 (Y コンビネーターとも呼ばれます) を実装する方法を見つけようとして立ち往生しています。
それ以外は順調だと思います。式は、次の判別共用体で表されます。
私のeval
機能はうまくいっているようです。次の例はすべて、期待どおりの結果をもたらします。
例 1:
> eval (Fun("x",Plus(Const 7,Var("x"))));;
val it : Expr = Fun ("x",Plus (Const 7,Var "x"))
例 2:
> eval (App(Fun("x",Plus(Const 7,Var("x"))),Const 3));;
val it : Expr = Const 10
例 3:
> eval (If(Const 0,Const 3,Const 4));;
val it : Expr = Const 4
しかし、前述したように、ラムダ計算内で固定小数点演算子を実装するのが困難です。ここでは次のように定義されています。
Y = lambda G. (lambda g. G(g g)) (lambda g. G(g g))
誰か提案はありますか?Yコンビネータに関する他の質問を見てきましたが、うまく採用できたものは見つかりませんでした。
すべての助けに感謝します。
編集:コードのタイプミスを修正しました...以前は、識別された組合のMult
代わりに持っていました。Minus
ふと気がついたのがおかしい!
haskell - HaskellのYコンビネータ
HaskellでYCombinatorを書くことは可能ですか?
無限再帰型のようです。
か何か。単純なわずかに因数分解された階乗でさえ
「発生チェック:無限型を構築できません:t = t->t2->t1」で失敗します
(Yコンビネータは次のようになります
スキームで)または、より簡潔に
応募注文についてそして
これは、怠惰なバージョンのイータ収縮です。
短い変数名を好む場合。
javascript - y-combinatorを使用して、このクロージャーのオブジェクト参照を取得できますか?
このクロージャーは機能します:
おそらくy-combinator操作に似たものを使用して、ハンドラーをインラインで定義することは可能ですか?
学術的な好奇心から、私は本番コードでこれを行おうとはしていません