On Mon, Aug 24, 2009 at 2:57 PM, Warren Harris<war...@metaweb.com> wrote: > Is there any advantage to using lazy evaluation in ocaml rather than just > using thunks to defer evaluation? E.g. > > let x = lazy (3+4) > let y = Lazy.force x > > vs: > > let x = fun () -> 3+4 > let y = x ()
Lazy cells don't just defer, they also memoize the returned value once the cell is forced. # let x = lazy (print_endline "forced"; 1);; val x : int lazy_t = <lazy> # Lazy.force x;; forced - : int = 1 # Lazy.force x;; - : int = 1 They even memoize exceptions: # let x = lazy (print_endline "forced"; failwith "failed");; val x : 'a lazy_t = <lazy> # Lazy.force x;; forced Exception: Failure "failed". # Lazy.force x;; Exception: Failure "failed". Jake _______________________________________________ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs