私はこのようにSMLでy-コンビネータを書くことができます: 真円度のために型の不一致を回避するために、まず新しいデータ型を宣言します。 val Y = fn f => (fn x => fn a => f (unroll x x) a)
(Roll (fn x => fn a => f (unroll x x) a)))
は、その後、あなたが行われて、あなたはこのようにそれを使
Y -(つまり上の説明は、同様素敵だろう)コンビネータと、このから例に出くわした - Combinatorの 私はYについて学ぶためにしようとしてきました。このテーマに関する深い説明は、HaskellまたはPythonのどちらでも高く評価されます。プレアワース! コード fix :: (a -> a) -> a
fix f = f (fix f)
問題 と呼ばれる機能fix戻っfixが(
Y-Combinatorを理解しようとした1時間後...ついにそれを得ましたが、それ以外は同じことが実現できることに気付きました...私はそれが目的を完全に理解しているかどうかは分かりません。 例えば、 PythonでY-Combinatorのための目的がある場合は、別のラムダに print (lambda f,m:f(f,m))((lambda g,n: n and n * g(g,n-1) o
この関数の型(a - > a) - > aはなぜですか? Prelude> let y f = f (y f)
Prelude> :t y
y :: (t -> t) -> t
無限/再帰型であってはなりませんか? 私はそれがどんなタイプであろうと思う言葉にしようとしていましたが、何らかの理由でそれをすることができません。 y :: (t -> t) -> ?WTFIsGoingOnOnT
私はScalaでGCDを定義するには、y-コンビネータを使用しようとしている: object Main {
def y[A,B](f : (A => B) => A => B) : A => B = f(y(f))
def gcd = y[(Int,Int),Int]((g) => (x,y) => if (x == 0) y else g(y % x, x))
}
しか