[racket] begin vs +
At Mon, 02 Aug 2010 21:54:54 +0900 (JST), Keiko Nakata wrote:
> Actually, I didn't see.
>
> Why this code
>
> (let ([d (box #f)] [a (box 0)])
> (print (+ (begin (let/cc k (begin (set-box! d k) (set-box! a 2) 3))) (unbox
> a)))
> ((unbox d) 9))
>
> prints 511111111, rather than 59999999?
I'm not sure I'm following. Can you say more about why you expect
infinite "9"s instead of infinite "11"s?
My reading is that a 2 gets installed into the box `a' once and for
all, and then it's repeatedly added to 9. Nothing aborts the `let/cc'
body before the `(set-box! a 2)' is evaluated. Also, the `+' is outside
the `let/cc', so it is captured in the continuation along with `print'.
In case it's a question of prompts: There is only one continuation
prompt in the example, which is around the entire expression. In
particular, the `begin' above doesn't introduce a continuation prompt.
The prompt in your earlier example wasn't from `begin', but from the
top level into which the `begin' forms were spliced.