Y Combinator学习总结
最近看完The little schemer,第一次看到这种编排的书,一问一答的形式,不知不觉就翻完了整本。很自然的教会大家写递归,怎样写程序,一点点的CPS,还有Y combinator。 个人觉得第九章推导Y combinator过程是我看到的最清晰,简单的一个了,只要花点耐心,就能学会。 scheme版本Y组合子 (define Y (lambda (le) ((lambda (f) (f f)) (lambda (f) (le (lambda (x) ((f f) x))))))) 直接翻译为erlang代码 Y = fun(M) -> (fun(F) -> F(F) end)( fun(F) -> M(fun(X) -> (F(F))(X) end) end ) end. 这样看起来不怎么清晰,抽取函数体,定义为变量,再带入 fun(F) -> F(F) end 即获得 Y = fun(M) -> G = fun (F) -> M(fun(X) -> (F(F))(X) end) end, G(G) end. Y组合子是用于lambda演算中实现递归逻辑的,即是可以实现匿名函数的递归调用。原理就是fixed-point combinator,不动点组合子。高阶函数 f 的不动点是另一个函数 g ,使得 f(g) = g 。那么不动点算子是任何函数 fix 使得对于任何函数