Hi,

I've been wondering how to lazy lists will work.
The answer "Correctly, don't worry about it", is entirely acceptable...

The intent of this example in S06 seems clear, make @oddsquares
a lazily filled array of squares of odd @nums:

 S06/Pipe operators

  It [==>] binds the (potentially lazy) list from the blunt end 
  to the slurpy parameter(s) of the subroutine on the sharp end. 
  [...]

  If the operand on the sharp end of a pipe is not a call to a 
  variadic operation, it must be a variable, in which case the 
  list value is assigned to the variable. This special case 
  allows for "pure" processing chains:

  @oddsquares <== map { $_**2 } <== sort <== grep { $_ % 2 } <== @nums;

So @oddsquares is like a stream of values derived from @nums.  (is it?)
Then presumably I can make a @primesquares stream:

  my (@ints, @primesquares);
  @ints <== 2...;
  @primesquares <== map { $_**2 } <== grep { is_prime($_) } <== @ints;

  say @primesquares[3];

Can I then treat @primesquares like an array, say by swapping
two elements?  How about @ints?

If these arrays can be be mutated then how can they be garbage
collected?  All the non-prime @ints could be still hanging around
while either array is in scope.

With cons based lists, past stream values are no longer referred to
so can be reclaimed, but we have random access arrays.

That's about where my wondering stopped.


Brad


I always get nervous when this sig appears "randomly"...
-- 
 There are times when a person gets carried away and talks on without
 thinking too much. But this can be seen by observers when one's mind is
 flippant and lacking truth. -- Hagakure http://bereft.net/hagakure/

Reply via email to