This site is updated infrequently. For up-to-date information, please visit the new OCaml website at ocaml.org.

[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: 2003-05-07 (15:43) From: Brian Hurt 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

```