FunctionalPerl
view release on metacpan or search on metacpan
docs/intro.md view on Meta::CPAN
to `f`.
You may be thinking that there's no way around mutating variables:
loops can't introduce new variable instances on every loop iteration:
you'd have to put the variable declaration inside the loop and then it
would lose its value across the loop iteration. Well--it's true that
you can't do that with the loop syntax that Perl offers (`for`,
`while`). But you are not forced to use those. Iteration just means to
process work step by step, i.e. do a step of work, check whether the
work is finished, and if it isn't, get the next piece of work and
start over. You can easily formulate this with a function that takes
the relevant pieces of information (remainder of the work, accumulated
result), checks to see if the work is done and if it isn't, calls
itself with the remainder and new result.
fperl> sub build ($i,$l) { if ($i > 0) { build($i-1, cons fun () { $i }, $l) } else { $l }}
fperl> build(3, null)
$VAR1 = list(sub { "DUMMY" }, sub { "DUMMY" }, sub { "DUMMY" });
This uses a new instance of `$i` in each iteration, as you can see
from this:
( run in 0.534 second using v1.01-cache-2.11-cpan-3cd7ad12f66 )