From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: ** X-Spam-Status: No, score=2.7 required=5.0 tests=AWL,DNS_FROM_RFC_POST, SPF_NEUTRAL autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by yquem.inria.fr (Postfix) with ESMTP id 19709BBAF for ; Tue, 25 Aug 2009 00:04:58 +0200 (CEST) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvIBAKerkkrRVdisimdsb2JhbACaST8BAQEICwwHEQWsXY51AQMCBIQWBYhj X-IronPort-AV: E=Sophos;i="4.44,267,1249250400"; d="scan'208";a="32845939" Received: from mail-px0-f172.google.com ([209.85.216.172]) by mail3-smtp-sop.national.inria.fr with ESMTP; 25 Aug 2009 00:04:57 +0200 Received: by pxi2 with SMTP id 2so3036425pxi.0 for ; Mon, 24 Aug 2009 15:04:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:received:in-reply-to :references:from:date:x-google-sender-auth:message-id:subject:to :content-type:content-transfer-encoding; bh=ydR0quNh7Q+CX0890rKU/bLj9LafDRjimBzzFAcN6S8=; b=pBstBSxqJXfiCALmM4QcFtsDYge7dRH4sSyT1BxO4lFb5Qg0cd4HyhMxrJznOVZmcm lPF2CwX1mCCnRQUCLQIDAsiTqKXxlS8C/7IAYFfjlBi998bMqexZXCE4HQ/KRx92izu8 i6YEcpTfUPSynhbYo3MFGnUCJxf4nyPywHYmk= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:from:date :x-google-sender-auth:message-id:subject:to:content-type :content-transfer-encoding; b=ETLuw5lYuGFPelHO5oIV7jKjgB34Dez6tD5vAbFu8H7bOVmXetXJ5/BKGLf60C3dbN fKtp8SU94x3ir30aySfI6vGn6/Px55Z2PjLjcl+RU9kL5j3oh/EzJPAhjFu/JYw7vvrU 1asTlmq6BBs+vHcSPjZNlI9C84cZKXrZgyXSg= MIME-Version: 1.0 Sender: jake.donham@gmail.com Received: by 10.142.195.7 with SMTP id s7mr319815wff.130.1251151496062; Mon, 24 Aug 2009 15:04:56 -0700 (PDT) In-Reply-To: <94AD5806-B6F6-44F7-AA3C-1E63B6C1A722@metaweb.com> References: <94AD5806-B6F6-44F7-AA3C-1E63B6C1A722@metaweb.com> From: Jake Donham Date: Mon, 24 Aug 2009 15:04:36 -0700 X-Google-Sender-Auth: 74aef681a1bc2d5d Message-ID: Subject: Re: [Caml-list] lazy vs fun To: OCaml Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Spam: no; 0.00; ocaml:01 memoize:01 endline:01 val:01 memoize:01 endline:01 failwith:01 val:01 2009:98 warren:98 warren:98 wrote:01 exception:01 exception:01 caml-list:01 On Mon, Aug 24, 2009 at 2:57 PM, Warren Harris 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.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.force x;; forced Exception: Failure "failed". # Lazy.force x;; Exception: Failure "failed". Jake