A continuation represents the rest of the computation with respect to a sub-computation, e.g., a procedure call. After a return from a procedure call, anything having to do is gone.
In Racket, you can grab this continuation, including pieces from sub-sub-computations within the extent of the procedure call. Grabing means you turn them into a value within the language. And on those continuations you can find the marks. By reinstalling these continuations, you can get the marks back. On Sep 5, 2014, at 5:24 PM, Gustavo Massaccesi wrote: > I'm trying to add a continuation mark inside a function, but I want > that the new mark to be visible after the functions returns. (Mostly > for curiosity, not an actual problem.) > > I want something like this: > > ;-- > #lang racket/base > > (define (display-cm-x) > (displayln > (continuation-mark-set->list > (current-continuation-marks) 'x))) > > (define (add-cm-x v) > '???) > > (define-syntax-rule (with-cm-x v body ...) > (with-continuation-mark 'x v > body ...)) > > (let () > (display-cm-x) ;==>() > (with-cm-x 7 > (display-cm-x)) ;==>(7) > (display-cm-x) ;==>() > (add-cm-x 7) > (display-cm-x) ;actual==>(), expected==>(7) > ) > ;-- > > The last line prints (), but I wish it prints (7). > > Gustavo > ____________________ > Racket Users list: > http://lists.racket-lang.org/users ____________________ Racket Users list: http://lists.racket-lang.org/users

