y-combinator

    6熱度

    1回答

    我知道我可以這樣寫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)

    6熱度

    1回答

    Ÿ - Combinator的 我一直在努力學習繞Y - 組合子(上的解釋是可愛的,以及)從這個​​跨越一個例子來了。關於這個主題的深入解釋在Haskell或者Python中都是非常讚賞的。 Pleaaase! 代碼 fix :: (a -> a) -> a fix f = f (fix f) 問題 調用的函數返回fix時9是fix應用於(\x -> 9),我不知道爲什麼;當我沿着堆棧看時,

    1熱度

    1回答

    我可以使用Kotlin FP(Lambda,函數)編寫Y組合函數嗎? Y = λf.(λx.f (x x)) (λx.f (x x)) 在JS: function Y(f) { return (function (g) { return g(g); })(function (g) { return f(function (x) { re

    0熱度

    1回答

    我想了解OCaml中的Y組合器。我從here獲取了一些代碼,我正在嘗試使用它來編寫Ackermann函數。在鏈接的例子中,這些函數只需要一個參數。 Ackermann函數需要兩個參數,並且因爲它而一直存在語法錯誤。我到目前爲止的代碼是 type 'a mu = Roll of ('a mu -> 'a);; let unroll (Roll x) = x;; let fix f = (fu

    0熱度

    1回答

    我建立了一個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);} 此得到無限遞歸的代碼。 這兩個版本有什麼區別?

    -1熱度

    1回答

    Ruby的遞歸如何被'破壞'以禁用ruby方法進行遞歸的能力? 需要創建一個程序來教授lambda微積分,但使用Ruby。從克羅克福德 動機上的JavaScript - https://www.youtube.com/watch?v=ya4UHuXNygM&feature=youtu.be&t=1h9m53s

    1熱度

    2回答

    我想創建一個lambda微積分函數P,使得給出((x y)(x P)(P z))。我嘗試過使用Y-combinator/Turing組合器的變種,即λg.(g g)形式的函數,因爲我需要重現函數本身,但是我看不到任何前進的方向。任何幫助將不勝感激。

    7熱度

    2回答

    這是Scala中的Y組合子的實現: scala> def Y[T](func: (T => T) => (T => T)): (T => T) = func(Y(func))(_:T) Y: [T](func: (T => T) => (T => T))T => T scala> def fact = Y { | f: (Int => Int) => | n:

    0熱度

    2回答

    在舊SWIFT世界的封閉(2.0我相信)的功能,我有以下的Y組合子實現 func Y<T, R>(f: (T -> R) -> (T -> R)) -> (T -> R) { return { (t: T) -> R in return f(self.Y(f))(t) } } 我會打電話在Y梳子別處創建一個遞歸的關閉,像這樣: let delayTime =

    6熱度

    3回答

    我相信我在數學上理解Y-組合器的想法:它返回給定功能F的固定點,因此f = Y(F)其中f滿足f == F(f)。 但我不明白它是如何明智的實際計算程序? 讓我們給here(我還包括在評論一個CoffeeScript的版本,它更易於閱讀)的JavaScript例如: var Y = function (F) { return (function(x) { return F(fu