[racket] Why choose the 'let*' construct over the 'define' construct when both can have sequential scope?

From: Laurent (laurent.orseau at gmail.com)
Date: Thu Feb 19 13:24:28 EST 2015

But in such situations you can be vicious and abuse `let` to have your
`define`s:
(let ()
  (define x 3)
  (define y 4)
  (list x y))

It's even more vicious if you use `let*` instead of `let`, but quite less
if you use `begin` instead ;)



On Thu, Feb 19, 2015 at 5:49 PM, Matthias Felleisen <matthias at ccs.neu.edu>
wrote:

>
> In some places, you are allowed only one expression, and for that
> situation, you need let*.
>
>
> On Feb 19, 2015, at 12:40 PM, Don Green <infodeveloperdon at gmail.com>
> wrote:
>
> > What is/are the reason(s) for choosing the 'let*' construct over the
> 'define' construct?
> >
> > (define (print-two f)
> >   (let* ([_ (print (first f))]
> >          [f (rest f)]
> >          [_ (print (first f))]
> >          [f (rest f)])
> >     f))
> >
> > (define print-two
> >   (lambda (f)
> >    (print (first f))
> >    (set! f (rest f))
> >    (print (first f))
> >    (set! f (rest f))
> >    f))
> >
> > (void (print-two '(1 2))) ;=> 12
> >
> > ____________________
> >  Racket Users list:
> >  http://lists.racket-lang.org/users
>
>
> ____________________
>   Racket Users list:
>   http://lists.racket-lang.org/users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20150219/08ef564d/attachment.html>

Posted on the users mailing list.