Juerd:

2005/11/23, Juerd <[EMAIL PROTECTED]>:
> Flavio S. Glock skribis 2005-11-23 10:13 (-0200):
> > Can we have:
> >   say 1..Inf;
>
> It's important, I think, to note that this isn't item context, but list
> context. Str list context, but still list context. Which means 1..Inf
> isn't stringified as a whole. &say will have an array that represents
> the lazy list. It should iterate over that rather than output it all at
> once, anyway, for reasons of conserving memory.

Ah, ok - but I believe that say() is slurpy, which means the list must
be instantiated first.

> > to output an infinite stream, instead of just looping forever?
>
> How do you imagine anything outputs infinite stuff, without looping
> forever? I don't think stdout knows about our kind of laziness :)

There are some reasons for this - you can see what's happening, and
press ctrl-C; or you may wish for it to output until there is a
timeout; or maybe you are writing a daemon which is supposed to run
forever anyway.

> > OTOH, it would be nice if
> >   say substr( ~(1..Inf), 0, 10 )
> > printed "1 2 3 4 5".
>
> Here, 1..Inf is stringified as a whole, while with say, each of the
> individual elements of the list are separately stringified. The question
> of lazy strings is an interesting one. It would be very useful, and
> would also allow GREAT things like
>
>     my $revfoo := reverse $foo;
>     $revfoo ~~ s/foo/bar/g;
>
> I wonder if it's doable, though...

I believe it is - I've come to this idea while trying to write down
the Array spec, and it seems pretty feasible.

> Juerd

Thanks!
- Flavio

Reply via email to