[racket] Definitions in cond-bodies

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Fri Jun 8 12:01:30 EDT 2012

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



Posted on the users mailing list.