[racket] "if" and internal definitions

From: Jens Axel Søgaard (jensaxel at soegaard.net)
Date: Sun Mar 16 16:59:06 EDT 2014

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


Posted on the users mailing list.