Version française
Home     About     Download     Resources     Contact us    
Browse thread
Difference between "let rec" and just "let"?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Christophe TROESTLER <Christophe.Troestler+ocaml@u...>
Subject: Re: [Caml-list] Difference between "let rec" and just "let"?
On Wed, 13 Aug 2008 14:49:30 +0200, circ ular wrote:
> 
> what is the difference between "let rec" and just "let"? what does rec
> stand for?
> 
> are the following defintions exactly the same? at least they seem to
> give the same results...
> 
> # let rec cube x = x*x*x;;
> val cube : int -> int = <fun>
> # cube 12;;
> - : int = 1728
> 
> # let cubex x = x*x*x;;
> val cubex : int -> int = <fun>
> # cubex 12;;
> - : int = 1728
> #

The difference is that for [let x = e], [x] is not known in [e] (or
else, it is a previously defined [x]).  This allows the following
style (broadly used despite the thread on that topic):

  let r = .... in
  let r = .... r (* r of the previous line *) .... in
  let r = .... r (* r of the previous line *) .... in
  let r = .... r (* r of the previous line *) .... in
  ...

When using [let rec x = e], [x] is known in [e] which allows to define
recursive functions but also cyclic data :

  let rec x = 1 :: x

Hope it helps,
C.


P.S.  There exist a beginner list where these questions belong.