Browse thread
[Caml-list] why the "rec" in "let rec"?
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ 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