RosettaCodeData/Task/Y-combinator/PHP/y-combinator-3.php

27 lines
658 B
PHP
Raw Permalink Normal View History

2013-10-27 22:24:23 +00:00
<?php
2015-02-20 00:35:01 -05:00
function Y($f) {
$g = create_function('$w', '$f = '.var_export($f,true).';
return $f(create_function(\'\', \'$w = \'.var_export($w,true).\';
return call_user_func_array($w($w), func_get_args());
\'));
');
return $g($g);
2013-10-27 22:24:23 +00:00
}
2015-02-20 00:35:01 -05:00
function almost_fib($f) {
return create_function('$i', '$f = '.var_export($f,true).';
return ($i <= 1) ? $i : ($f($i-1) + $f($i-2));
');
};
$fibonacci = Y('almost_fib');
2013-10-27 22:24:23 +00:00
echo $fibonacci(10), "\n";
2015-02-20 00:35:01 -05:00
function almost_fac($f) {
return create_function('$i', '$f = '.var_export($f,true).';
return ($i <= 1) ? 1 : ($f($i - 1) * $i);
');
};
$factorial = Y('almost_fac');
echo $factorial(10), "\n";
2013-10-27 22:24:23 +00:00
?>