
PHP lambdas
By: a guest on
Jun 1st, 2012 | syntax:
PHP | size: 0.88 KB | hits: 13 | expires: Never
function L($expr) {
$lhelper = function($expr, $vars = array()) use (&$lhelper){
if (is_null($expr)) return;
$parts = explode('=>', $expr, 2);
if (!isset($parts[1])) {
$stmts = explode(';', $parts[0]);
return implode(';', array_slice($stmts, 0, -1) + array('return '. end($stmts)));
}
return 'return function('.
$parts[0].
')'.
($vars ? ' use('. implode(',', $vars) .')' : '').
' { '.
$lhelper($parts[1], ($vars + explode(',', $parts[0]))).
';}';
};
return eval($lhelper($expr) .';');
}
$l1 = L('$x, $f => $f($x)');
$l2 = L('$x => $y => $x * $y');
echo $l1(17, $l2(17)), PHP_EOL;
$a = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17);
print_r(array_map(L('$x => $x * $x'), $a));