Browse thread
Generators/iterators and lazy evaluation?
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 2007-04-04 (21:17) |
From: | Erik de Castro Lopo <mle+ocaml@m...> |
Subject: | Re: [Caml-list] Generators/iterators and lazy evaluation? |
Alain Frisch wrote: > I think you cannot implement this notion of iterator without some kind > of control flow operator (at runtime) or some code rearrangement (at > compile time). The point is that you must mainting several active > "threads" of computations, including their own stack. Alain, I think you may have misunderstood Python's yeild operator. Typically the original poster's pow2 generators would be used like: for p = pow2 (10): print p but I really don't see how laziness Python's generators actually provide any benefit for this problem over the more obvious Python solution to this which is: for i = range (10): p = 2 ^ i print p The problem with the above is that generators (and laziness in Ocaml) really only make sense for sequences which are effecitvely infinite. In the Python case, that would be: def pow2 (): start = 0 yield 2^start start += 1 One ocaml solution to this is an class/object: class pow2gen = object val mutable current = 0 method next () = current <- if current == 0 then 1 else current * 2 ; current end which can be used like this: let _ = let pow2 = new pow2gen in for k = 0 to 10 do Printf.printf "%d : %d\n" k (pow2#next ()) ; done There would also be a lazy solution to this problem but I don't think it would be a better solution that the object soultion above. I've got a more realistic example of lazy lists on my blog: http://www.mega-nerd.com/erikd/Blog/CodeHacking/Ocaml/lazy_lists.html Hope this helps, Erik -- +-----------------------------------------------------------+ Erik de Castro Lopo +-----------------------------------------------------------+ "Every time microshaft's stock price drops again, I rejoice. I want to see that bunch of criminals brought to their knees. Preferably at the chopping block." -- rixt in http://linuxtoday.com/stories/20659_flat.html