[racket] "if" and internal definitions

From: Justin Zamora (justin at zamora.com)
Date: Sun Mar 16 16:38:46 EDT 2014

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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20140316/9d4efd22/attachment.html>

Posted on the users mailing list.