With all due respect, I disagree. Like Jens, I consider the (define u ..) 
nested and scoped inside the first cond branch. 


On Jun 8, 2012, at 11:56 AM, Sam Tobin-Hochstadt wrote:

> On Fri, Jun 8, 2012 at 11:42 AM, Jens Axel Søgaard
> <[email protected]> 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
> [email protected]
> 
> ____________________
>  Racket Users list:
>  http://lists.racket-lang.org/users


____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to