Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: Brian Hurt <brian.hurt@qlogic.com>
To: David Brown <caml-list@davidb.org>
Cc: Hal Daume III <hdaume@ISI.EDU>,
	Neel Krishnaswami <neelk@alum.mit.edu>,
	"caml-list@inria.fr" <caml-list@inria.fr>
Subject: Re: [Caml-list] why the "rec" in "let rec"?
Date: Wed, 7 May 2003 10:53:36 -0500 (CDT)	[thread overview]
Message-ID: <Pine.LNX.4.33.0305071051330.3160-100000@eagle.ancor.com> (raw)
In-Reply-To: <20030507151603.GA21844@opus.davidb.org>


An example of this in action- an efficient and portable way to find the 
high bit set in an int:

let log2 x =
    if (x == 0) then -1 else
    let x, r = if (x < 0) then (x lsr 1), 1 else x, 0 in
    let x, r = if (Sys.word_size == 64) && (x > 0xFFFFFFFF) 
               then (x lsr 32), (r + 32) else x, r in
    let x, r = if x > 0xFFFF then (x lsr 16), (r + 16) else x, r in
    let x, r = if x > 0xFF then (x lsr 8), (r + 8) else x, r in
    let x, r = if x > 0xF then (x lsr 4), (r + 4) else x, r in
    let x, r = if x > 0x3 then (x lsr 2), (r + 2) else x, r in
    let r = if x > 1 then (r + 1) else r in
    r

Brian

On Wed, 7 May 2003, David Brown wrote:

> On Wed, May 07, 2003 at 07:57:13AM -0700, Hal Daume III wrote:
> 
> > > let f x = ..
> > > let f x = f x
> > 
> > is to simply disallow bindings like this.  I would think that they're
> > almost always a bug.  Especially if the first definition appears at the
> > top of your file and the second (perhaps you forgot the "rec" and the body
> > is actually long) appears at the bottom.  Likely it would turn out to be a
> > type error anyway, but why risk it?
> > 
> > Anyway, I think the question was more along the lines of "why let the
> > programmer do something like this."  I cannot answer that.
> 
> I hope it doesn't get disabled.  There are some very common idioms that
> use this type of declaration.
> 
>   let ... =
>     let a = ... a ... in
>     let a = ... a ... in
>     let a = ... a ... in
> 
> This way, you can build up the value of a, almost like they were
> assignments, but without the problems associated with mutable values.
> It would be silly to have to keep thinking of new names for the variable
> each time you did this.
> 
> I have also made wrappers for functions for debugging purposes, and
> found it very convenient to just be able to call the old definition.
> 
> Dave Brown
> 
> -------------------
> 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:[~2003-05-07 15:43 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-05-07 14:04 Garry Hodgson
2003-05-07 14:31 ` Chris Uzdavinis
2003-05-07 14:50 ` Neel Krishnaswami
2003-05-07 14:57   ` Hal Daume III
2003-05-07 15:11     ` Falk Hueffner
2003-05-07 15:16     ` David Brown
2003-05-07 15:53       ` Brian Hurt [this message]
2003-05-07 15:51         ` Garry Hodgson
2003-05-07 15:40     ` Neel Krishnaswami
2003-05-07 15:59     ` Gerd Stolpmann
2003-05-13 16:36       ` Pierre Weis

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=Pine.LNX.4.33.0305071051330.3160-100000@eagle.ancor.com \
    --to=brian.hurt@qlogic.com \
    --cc=caml-list@davidb.org \
    --cc=caml-list@inria.fr \
    --cc=hdaume@ISI.EDU \
    --cc=neelk@alum.mit.edu \
    /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