# [racket] Definitions in cond-bodies

On Fri, Jun 8, 2012 at 11:42 AM, Jens Axel Søgaard
<jensaxel at soegaard.net> wrote:
>*
*>* When
*>*
*>* (let ([x 1])
*>* (cond
*>* [(= x 1)
*>* (define u 2)
*>* (+ u 1)]
*>* [else u]))
*>*
*>* is pasted into the interaction window, I get 3 !
*>*
*>* I was expecting an error.
*
This is the same behavior as:
-> (if #f x 1)
1
What's happening is that `#%top` behaves differently at the REPL than
in a module. This enables you to write:
-> (define (even? x) (or (zero? x) (odd? (sub1 x))))
-> (define (odd? x) (or (= x 1) (even? (sub1 x))))
without getting an error when entering the first line.
--
sam th
samth at ccs.neu.edu