On Wed, Dec 13, 2006 at 10:55:28AM +0200, Gaal Yahas wrote:
: L<S04/"The do-once loop"/"A variant of do is gather"> stipulates the
: results of a gather are flattened to a lazy list. I'm not sure how far
: that flattenning goes, but one of these should do the trick, I think

It would only flatten a recursive structure with the help of something
that recurses.  The flattening of gather/take itself is only one level,
insofar as the various takes are treated as "pushes" onto the list
being gathered.

: (Pugs does not yet implement gather/take):

Actually, it does, but only the block form.  The generalization to any
statement (using C<do> syntax) was a very recent change.

The following prints (1, 2, 3, 4, 5) in current pugs:

    #!/usr/bin/pugs

    my $a = [1,2,[3,4],5];

    multi flattener ($x) {
        take $x;
    }
    multi flattener (Array @array) {
        for @array -> $elem {
            flattener($elem);
        }
    }

    sub flatten ([EMAIL PROTECTED]) {
        for @args -> $arg {
            return gather { flattener($arg) }
        }
    }

    $a.flatten.perl.say;

Larry

Reply via email to