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 <[email protected]>
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 <[email protected]>
> 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
>
____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to