#!/usr/bin/perl
#
# eg22: 5th lazylist example, merge powers..
#

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

use List;
$List::as_string_limit = 8;

# $list = power( $n, $p ) - return an infinite list n, n*p, n*p^2..
fun power( $n, $p )
{
	return List->cons( $n, fun { power($n*$p,$p); } );
}

my $twos   = power( 1, 2 );		# powers of 2
my $threes = power( 1, 3 );		# powers of 3
my $fives  = power( 1, 5 );		# powers of 5

my $m23    = merge_l { $a <=> $b } $twos, $threes;
my $m235   = merge_l { $a <=> $b} $m23, $fives;
my $all    = grep_l  { $_ > 1 } $m235;
print "first few merged values: $all\n";
