$sum = function () { $vals = func_get_args(); return Fn::foldl(function ($a, $b) { return $a + $b; }, 0, $vals); }; echo "Sum(1, 2, 3, 4, 5) => 15\n"; print_r($sum(1, 2, 3, 4, 5)); echo "\n"; echo "Zip(array(1, 2, 3), array(3, 2, 1), array(1, 2, 3)) == array((1, 3, 1), (2, 2, 2), (3, 1, 3))\n"; print_r(Fn::zip(array(1, 2, 3), array(3, 2, 1), array(1, 2, 3))); echo "\n"; $rdiv = function () { $vals = func_get_args(); return Fn::foldr(Fn::flip(function ($a, $b) { echo "{$a} / {$b} = " . $a / $b . "\n"; return $a / $b; }), 2, $vals); }; echo "RDiv(/ 2 array(8, 12, 24, 4)) => 8.0\n"; echo $rdiv(8, 12, 24, 4) . "\n\n"; echo "flip(\$divv)(1, 0) == 0\n"; $fdivv = Fn::flip(function ($x, $y) { return $x / $y; }); echo $fdivv(1, 0) . "\n\n"; $x = Fn::lambda('/2'); echo "4 / 2\n"; echo $x(4) . "\n\n"; $y = Fn::lambda('$a $b -> $a / $b'); echo "4 / 2\n"; echo $y(4, 2) . "\n\n";