[racket] "if" and internal definitions
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