Y combinator in PHP
$Y = function($f){
$x = function($s) use($f){
return function($n) use($s, $f){
return $f($s($s))->__invoke($n);
};
};
return $x($x);
};
$factorial = $Y(function($recurse){
return function($x) use($recurse){
return $x === 0 ? 1 : $x * $recurse($x - 1);
};
});
echo $factorial(6); // 720
花了一些时间用 PHP 推导了一遍 Y combinator,因为语法上的一些原因,推导过程中总觉得怪怪的。推导结果代码如上所示,精简和美观程度与 LISP 相差甚远,也就勉强能看。