这个名字和什么孵化器重名。为了澄清,这里的是程序设计里面的Y-Combinator。
使用JavaScript的原因仍然是它适合常人理解,尤其是对函数式编程没有任何概念的人。
引入
在λ演算里面是没有,拥有具体名字的函数的,例如一个最简单的例子——递归求阶乘,你可能会这样写一段代码:
function fact(n)
{
return n > 1 ? n * fact(n - 1) : 1;
}
我们现在把它变成λ函数版本的:
function(n)
{
return n > 1 ? n * fact(n - 1) : 1;
}
那么问题就来了,fact咋办?在最开始的代码中,fact事实上就是这个被调用的函数。而第二段代码,里面可没有什么fact,而之前的调用fact,现在就变成了调用λ函数本身。但是,λ函数可没有this指针这样的东西,那怎么办嗯?
对应的故事依然存在于λ演算,没法操作一个匿名函数完成递归。这显然令人感到不愉快。
一个很好的想法是我们把这个函数作为另一个匿名函数的参数: