deltam / StreamPHP

SICP like infinite stream for PHP. (This is toy library, not practical.)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

StreamPHP

SICP like infinite stream for PHP.

(This is toy library, not practical.)

Requirements

php >= 5.6

Demo

demo/integer_stream.php

function integers_start_from($n)
{
    return Stream::cons($n, function() use ($n) {return integers_start_from($n + 1);});
}
// 自然数の無限ストリーム
$naturals = integers_start_from(1);
echo "natural numbers:\n";
display_line($naturals, 20);

// natural numbers:
// 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

demo/prime_stream.php

/** SICP3.5.2 エラトステネスの篩 */
function sieve($s)
{
    return Stream::cons(
        $s->car(),
        function() use($s) {
            return sieve(
                $s->cdr()->filter(
                    function($n) use($s) {
                        return !divisible($n, $s->car());
                    }));
        });
}

$n2 = $naturals->cdr(); // 2 3 4 5 ...

// 素数の無限ストリーム
$primes = sieve($n2);
echo "primes:\n";
display_line($primes, 20);

// primes:
// 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71

ArrayAccess is implemented.

echo "100th prime:\n";
echo $primes[99] . "\n";

// 100th prime:
// 541

License

Copyright (c) 2018 Masaru MISUMI (deltam@gmail.com).

Licensed under the MIT License (http://www.opensource.org/licenses/mit-license.php)

About

SICP like infinite stream for PHP. (This is toy library, not practical.)


Languages

Language:PHP 99.5%Language:Shell 0.5%