We have let and let*, but only define. I miss define* at times.

This is an error:

    (block
      (define x 4)
      (define x (+ x 1))
      (+ x 2))

With a define* it becomes:

    (block
      (define x 4)
      (define* x (+ x 1))
      (+ x 2))

which (should) expand to:

    (block
      (define x 4)
      (block
        (define x (+ x 1))
        (+ x 2)))

/Jens Axel

2015-02-19 19:24 GMT+01:00 Laurent <[email protected]>:
> 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
>



-- 
--
Jens Axel Søgaard

____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to