caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Sven Luther <luther@dpt-info.u-strasbg.fr>
To: caml-list@inria.fr
Subject: Re: [Caml-list] Guards vs. conditionals
Date: Thu, 26 Dec 2002 10:13:03 +0100	[thread overview]
Message-ID: <20021226091303.GA803@iliana> (raw)
In-Reply-To: <20021226070651.GB1071@swordfish>

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


  reply	other threads:[~2002-12-26  9:13 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-12-26  7:06 Matt Gushee
2002-12-26  9:13 ` Sven Luther [this message]
2002-12-26 16:36   ` Pierre Weis
2003-01-02  9:54 ` Xavier Leroy
     [not found] <D4DBD8568F05D511A1C20002A55C008C11AC0404@uswaumsx03medge.med.ge.com>
2002-12-27  7:37 ` Matt Gushee
2002-12-27  9:15   ` Luc Maranget

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20021226091303.GA803@iliana \
    --to=luther@dpt-info.u-strasbg.fr \
    --cc=caml-list@inria.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).