[racket] call/comp, eq? and call-with-continuation-prompt
You'll see that '(1 . 2) prints two extra times in that case, because
the captured continuation includes the printout of the result of `(t)`.
As a result, the `eq?` compares (void) to (void), since each printout
produced (void).
At Mon, 10 Mar 2014 20:10:20 -0700 (PDT), "Spencer florence" wrote:
> Out of curiosity, why would removing the prompt tag change the behavior?
>
> On Mon, Mar 10, 2014 at 10:50 PM, Matthew Flatt <mflatt at cs.utah.edu>
> wrote:
>
> > I think this is a compiler bug, where the compiler is changing
> > (let ([a (cons 1 2)])
> > (call-with-composable-continuation (λ (k) (set! g k)) p)
> > a)
> > to
> > (begin
> > (call-with-composable-continuation (λ (k) (set! g k)) p)
> > (cons 1 2))
> > so you get a new pair each time the continuation is called.
> > I will need to fix the compiler so that it doesn't move allocation past
> > an expression that could capture a continuation.
> > At Mon, 10 Mar 2014 21:44:19 -0400, Spencer Florence wrote:
> >> For some reason the below program returns false:
> >>
> >> #lang racket
> >> (define g #f)
> >> (define p (make-continuation-prompt-tag))
> >> (define (t)
> >> (let ([a (cons 1 2)])
> >> (call-with-composable-continuation (λ (k) (set! g k)) p)
> >> a))
> >> (call-with-continuation-prompt t p)
> >> (eq? (call-with-continuation-prompt g p)
> >> (call-with-continuation-prompt g p))
> >>
> >> This happens with call/cc as well. From my understanding a should be
> >> allocated before the continuation is captured, so the two calls to g should
> >> return the same cell. If I remove the prompt tag the program returns true.
> >>
> >> Anyone have any clue whats going on or how to fix?
> >>
> >> --Spencer
> >> ____________________
> >> Racket Users list:
> >> http://lists.racket-lang.org/users____________________
> Racket Users list:
> http://lists.racket-lang.org/users