Damian Conway writes:
 > 
 > There's no second iterator. Just C<for> walking through an array.
 > 

( questions in the form of answers :-) 

so : 
* "for" impose array context for first argument and doesnt care about
  "nature" of the array which it was given eventually as an argument .
  no multiple streams -- use parallel and friends. 
  
* parallel and friends return lazy array ( for performance
  considerations ???? ) _o_r_ "for" *notice* the parallel and ??? optimize
  it away / dont know

  for parallel(@a,@b) -> ($x,$y) { ... } 

* every object with "next" method can function as iterator ???
  _o_r_ we always have to inherit from "iterator" class . 
  what about reset/rewind  ???

* $fh = open "myfile" ; 
  for <$fh> { ... while <$fh> { ... } ...  }

  both <$fh> *ultimately* use *the same* method call $fh.next , but
  second <$fh> does it explicitely , while the first -- from under the
  cloth of lazy array returned by $fh.each and "drived" by "for" .

* what does it mean that "for walks the array" ( keeping in mind that
  that array may be usual or lazy and for have to not to care  )

 > > 
 > > What's the difference between a lazy array and an iterator? Is there
 > > caching?
 > 
 > Yes. A lazy array is a wrapper-plus-cache around an iterator.
 > 

$fh = open "file" ; 
@a := $fh ; 
print @a[3] # 4 calls to "$fh.next" 
print @a[0] # no calls to "$fh.next" 

is that the meaning of ...-plus-cache ????


 > 
 > > Some of questions about iterators and stuff:
 > > 
 > > 1- Are iterators now considered a fundamental type? 
 > 
 > Probably, since they're fundamental to I/O and C<for> loops.
 > 
 > 

so every class can define its own "next"  method or inherit from
Iterator to be used as an iterator _o_r_ it ( class ) *always* have to 
inherit from Iterator --  to be used as iterator  ??? 
Naively , it seems that this is similar to booleans in perl -- no need to
inherit from special class to behave as boolean. 

 > 
 > > 2a- Is there an C<Iterator.toArray()> or C<.toList()> method?
 > 
 > Iterator::each.
 > 
 > 
 > > 2a1- The notion that Iterator.each() returns a lazy array seems a
 > > little wierd. Isn't a lazy array just an iterator?
 > 
 > No. It's an array that populates itself on-demand using an iterator.
 > 

what is the difference between the arrays @a, @b , ... here 
????

$a = Iterator.new( ... )  
@a = $a.each ; 
@b := $a.each ; 
@c := $a ; 
@d is lazy = ( 1, 2, 3 ) ;
@f is lazy = $a.each ;


 > Iterator: an object that returns successive values from some source
 >        (such as an array, a filehandle, or a coroutine)

isnt it *anything* having method "next" ???
why do I need a special type "iterator" ? 


thanks , 

arcadi . 

Reply via email to