<?php 

function map_impl($arr, $f, $idx)
{
    return array_map($f, array_intersect_key($arr, $idx));
}

function map($arr, $f)
{
    return map_impl($arr, $f, range(0, count($arr) - 1));
}

function MyFunctor($arg)
    {
        return floatval($arg * $arg) / 2.0;
    };

function main()
{
    $arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

    $arrMappedFunctor = map($arr, "MyFunctor");
    $arrMappedLambda = map($arr, function($x) { return floatval($x * $x) / 2.0; });

    foreach ($arrMappedFunctor as $x) {
        echo strval($x) . ' ';
    }
    echo PHP_EOL;
    foreach ($arrMappedLambda as $x) {
        echo strval($x) . ' ';
    }
    echo PHP_EOL;
    return 0;
}

main();
