#!/usr/bin/perl
#
# eg20a: 3rd lazylist example, efficient variation..
#

use strict;
use warnings;
use Function::Parameters qw(:strict);

use List;
$List::as_string_limit = 8;

# $list = stepup( $n, $step ) - return an infinite list n, n+step, n+2*step...
fun stepup( $n, $step )
{
	return List->cons( $n, fun { stepup($n+$step,$step); } );
}

my $evens   = stepup( 8, 2 );
my $squares = grep_l { my $r = int(sqrt($_)); $r*$r == $_ } $evens;

print "first few even perfect squares > 7: $squares\n";
