Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] why the "rec" in "let rec"?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Brian Hurt <brian.hurt@q...>
Subject: Re: [Caml-list] why the "rec" in "let rec"?

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