[racket] "if" and internal definitions

From: Justin Zamora (justin at zamora.com)
Date: Sun Mar 16 17:06:14 EDT 2014

Ok, but why is "cond" defined to behave differently? I expected "cond" to
behave the same as "if".

Justin
On Mar 16, 2014 4:59 PM, "Jens Axel Søgaard" <jensaxel at soegaard.net> wrote:

> The problem is that  begin  does not introduce a new scope.
> You can use (let () ...) or block instead.
>
>
> http://docs.racket-lang.org/reference/block.html?q=block#%28form._%28%28lib._racket%2Fblock..rkt%29._block%29%29
>
> /soegaard
>
>
> 2014-03-16 21:38 GMT+01:00 Justin Zamora <justin at zamora.com>:
> > What is the reason for not allowing internal definitions in the "then"
> and
> > "else" parts of an "if"?
> >
> > This fails with "define: not allowed in an expression context":
> > (if (< 3 4)
> >     5
> >     (begin
> >       (define a 7)
> >       a))
> >
> > But the equivalent "cond" works fine:
> > (cond
> >   [(< 3 4) 5]
> >   [else (define a 7)
> >           a])
> >
> > I notice that the expansion of "cond" encloses the clauses inside
> > (let-values () ...). Why doesn't "if" allow this?
> >
> > Justin
> >
> > ____________________
> >   Racket Users list:
> >   http://lists.racket-lang.org/users
> >
>
>
>
> --
> --
> Jens Axel Søgaard
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20140316/44d31f5f/attachment.html>

Posted on the users mailing list.