[racket] begin vs +
At Mon, 02 Aug 2010 20:42:34 +0900 (JST), Keiko Nakata wrote:
> This code prints "hi" twice,
>
> (define d (box #f))
>
> (+ (begin (let/cc k (begin (set-box! d k) 3))) (begin (print "hi") 9))
>
> ((unbox d) 0)
>
> whereas this prints "hi" once
>
> (define d (box #f))
>
> (begin (begin (let/cc k (begin (set-box! d k) 3))) (print "hi"))
>
> ((unbox d) 0)
>
> Why?
Each form at the top level is wrapped in a prompt, and the content of a
top-level `begin' is spliced into the top level.
The latter program is the same as
(define d (box #f))
(let/cc k (begin (set-box! d k) 3))
(print "hi")
((unbox d) 0)
where there's an implicit prompt around the `let/cc' form.