#!/usr/bin/env perl
our
(
$mydir
,
$myname
);
BEGIN {
my
$location
= (-l $0) ? abs_path($0) : $0;
$location
=~ /(.*?)([^\/]+?)_?\z/s or
die
"?"
;
(
$mydir
,
$myname
) = ($1, $2);
}
sub
usage {
print
"usage:
$myname
outpath numrows
Write some useless number series in CSV
format
.
Purpose: example and test
for
lazy list (streaming) code (check
for
leaks/memory retention).
";
exit
(
@_
? 1 : 0);
}
our
$verbose
= 0;
GetOptions(
"verbose"
=> \
$verbose
,
"help"
=>
sub
{usage},) or
exit
1;
usage
unless
@ARGV
== 2;
our
(
$path
,
$numrows
) =
@ARGV
;
sub
fibs () {
my
$fibs
;
$fibs
= cons 1, cons 1, lazy {
$fibs
->stream_zip_with(\
&add
, rest
$fibs
) };
$fibs
}
sub
exps;
*exps
= uncurry fun(
$base
) {
fix
sub
(
$rec
,
$x
) {
lazy { cons
$x
,
&$rec
(
$x
*
$base
) }
}
};
sub
series () {
my
$a
= 1.01;
my
$b
= 0.99;
my
$ns
= rest stream_iota;
my
$as
= exps
$a
,
$a
;
my
$bs
= exps
$b
,
$b
;
my
$fibs
= fibs;
([
"n"
,
"$a^n"
,
"$b^n"
,
"fib"
], stream_zip
$ns
,
$as
,
$bs
,
$fibs
)
}
sub
page (
$title
,
$rows
) {
cons
$title
,
$rows
->take(
$numrows
)
}
my
$page
= page(series);
rows_to_csv_file
$page
,
$path
, +{
eol
=>
"\n"
,
sep_char
=>
";"
};