Exemplo n.º 1
0
    $c = compose(with($x), 'plus');
    return $c($y) !== $x + $y;
}, 'sum' => function () {
    return sum($xs = range(0, mt_rand(1, 100))) !== array_reduce($xs, 'plus', 0);
}, 'random1' => function () {
    return !is_int(random(null));
}, 'mem1' => function () {
    return mem('true') <= 0;
}, 'upto1' => function ($n) {
    return count(upto($n % 100)) !== $n % 100;
}, 'between1' => function () {
    return between(5, 10) !== [5, 6, 7, 8, 9, 10];
}, 'b_then' => function ($n) {
    return branch(thunk($n), null, thunk(true), null) !== $n;
}, 'b_else' => function ($n) {
    return branch(null, thunk($n), thunk(false), null) !== $n;
}, 'until1' => function ($n) {
    $x = $n % 8;
    return until(function ($args) use($x) {
        list($m, $arr) = $args;
        return [$m === $x, [$m + 1, snoc($m, $arr)]];
    }, [0, []]) !== [$x + 1, upto($x + 1)];
}, 'trampoline1' => function ($n) {
    $x = $n % 8;
    return trampoline(y(function ($f, $m, $n, $_) {
        return $m < $n ? [false, $f($m + 1, $n)] : [true, $m];
    }, 0, $x)) !== $x;
}, 'loop1' => function ($x) {
    $n = $x % 8;
    $lhs = loop(function ($x, $m) use($n) {
        return [$m >= $n, snoc($m, $x)];
Exemplo n.º 2
0
    return function ($x) use($funcs, $f) {
        static $curried = true;
        return array_reduce($funcs, function ($x, $f) {
            return call_user_func(op($f), $x);
        }, call_user_func_array($f, func_get_args()));
    };
}
defun('implode_', 'implode');
defun('join_', implode_(''));
defun('concat', function ($n) {
    return compose('join_', array_($n));
});
defun('thunk', function ($x, $_) {
    return $x;
});
defun('nil', thunk([]));
defuns(['filter' => flip(nary('array_filter', 2)), 'sum' => nary('array_sum', 1)]);
defuns(['keys' => nary('array_keys', 1), 'values' => nary('array_values', 1), 'merge' => nary('array_merge', 2), 'foldr' => function ($f, $zero, $arr) {
    // Take args in a sane order
    return array_reduce($arr, $f, $zero);
}, 'key_foldr' => function ($f, $zero) {
    return compose(foldr($f, $zero), key_map(array_(2)));
}, 'subscript' => function ($x, $y) {
    return $x[$y];
}, 'take' => function ($n, $a) {
    return array_slice($a, 0, $n);
}, 'cons' => function ($x, $y) {
    return merge([$x], $y);
}, 'snoc' => function ($x, $y) {
    return merge($y, [$x]);
}, 'echo_' => function ($x) {