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
next prev parent 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