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 <jus...@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 ____________________ Racket Users list: http://lists.racket-lang.org/users