From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id KAA25390; Thu, 26 Dec 2002 10:13:05 +0100 (MET) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id KAA25480 for ; Thu, 26 Dec 2002 10:13:04 +0100 (MET) Received: from mel-rto2.wanadoo.fr (smtp-out-2.wanadoo.fr [193.252.19.254]) by concorde.inria.fr (8.11.1/8.11.1) with ESMTP id gBQ9D4H26201 for ; Thu, 26 Dec 2002 10:13:04 +0100 (MET) Received: from mel-rta8.wanadoo.fr (193.252.19.79) by mel-rto2.wanadoo.fr (6.7.015) id 3E075BC6000D978B for caml-list@inria.fr; Thu, 26 Dec 2002 10:13:04 +0100 Received: from iliana (80.15.168.230) by mel-rta8.wanadoo.fr (6.7.015) id 3E075B32000BC78D for caml-list@inria.fr; Thu, 26 Dec 2002 10:13:04 +0100 Received: from luther by iliana with local (Exim 3.36 #1 (Debian)) id 18RU4d-0000R4-00 for ; Thu, 26 Dec 2002 10:13:03 +0100 Date: Thu, 26 Dec 2002 10:13:03 +0100 To: caml-list@inria.fr Subject: Re: [Caml-list] Guards vs. conditionals Message-ID: <20021226091303.GA803@iliana> References: <20021226070651.GB1071@swordfish> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20021226070651.GB1071@swordfish> User-Agent: Mutt/1.4i From: Sven Luther Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk On Thu, Dec 26, 2002 at 12:06:52AM -0700, Matt Gushee wrote: > Hi, all-- > > I'm just curious about something. I've been noticing that in many cases > (if not always) a pattern match with guard expressions in OCaml is > equivalent to a conditional statement. E.g.: > > let foo = > function > | i when i >= 500 -> true > | i -> false > > does the same thing as > > let foo i = > if i >= 500 then true > else false > > And I wrote a pair of small programs, each of which invokes one of these > functions on a random integer 100,000 times. The executables, whether > byte-compiled or native, are almost exactly the same size and, according > to a round of informal tests with GNU time, run at the same speed. This > suggests that the compiled code is for all practical purposes the same. > Yes, i guess the exact same code it generated for both. > So, my question is, is there any objective reason to prefer the > pattern-match version over the conditional, or vice versa? Or is it just > a matter of coding style? It is just a matter of coding style. I think that the if version is maybe easier to do prooves on or something such, and that guard version is easier to read and maybe better when there are more than one condition, but the compiler does not know when the guards cover all the cases, and may output a warning when non is needed : consider : let foo = function | i when i > 500 -> 1 | i when i = 500 -> 2 | i when i < 500 -> 3 Which will output a warning. Friendly, Sven Luther > > -- > Matt Gushee When a nation follows the Way, > Englewood, Colorado, USA Horses bear manure through > mgushee@havenrock.com its fields; > http://www.havenrock.com/ When a nation ignores the Way, > Horses bear soldiers through > its streets. > > --Lao Tzu (Peter Merel, trans.) > ------------------- > To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr > Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners