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

