Skip to content

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

deltam/StreamPHP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published