我知道我可以這樣寫SML中的y-combinator,如下所示: 首先聲明一個新的數據類型來繞過由於圓形造成的類型不匹配。 datatype 'a mu = Roll of ('a mu -> 'a)
val unroll = fn Roll x => x
現在您可以輕鬆定義的Y組合子: val Y = fn f => (fn x => fn a => f (unroll x x) a)
Ÿ - Combinator的 我一直在努力學習繞Y - 組合子(上的解釋是可愛的,以及)從這個跨越一個例子來了。關於這個主題的深入解釋在Haskell或者Python中都是非常讚賞的。 Pleaaase! 代碼 fix :: (a -> a) -> a
fix f = f (fix f)
問題 調用的函數返回fix時9是fix應用於(\x -> 9),我不知道爲什麼;當我沿着堆棧看時,
我想了解OCaml中的Y組合器。我從here獲取了一些代碼,我正在嘗試使用它來編寫Ackermann函數。在鏈接的例子中,這些函數只需要一個參數。 Ackermann函數需要兩個參數,並且因爲它而一直存在語法錯誤。我到目前爲止的代碼是 type 'a mu = Roll of ('a mu -> 'a);;
let unroll (Roll x) = x;;
let fix f = (fu
我建立了一個Y型組合子在JS這樣 const y = f => { const g = self => x => f(self(self))(x); return g(g);}
,我簡化了這樣 const y = f => { const g = self => f(self(self)); return g(g);}
此得到無限遞歸的代碼。 這兩個版本有什麼區別?