[racket] Definitions in cond-bodies
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