たいがいのSchemeの処理系で
(define cont #f)
(define (bar)
  (let ((a 0) (b 0))
    (set! b (call-with-current-continuation
                (lambda (k) (set! cont k)
                  0)))
    (set! a (+ a b))
    a))
(define (print x) (write x)(newline))
(define (foo)
  (print (bar))
  (print (cont 1)))
(foo)
を実行すると、継続を呼び出すごとにaの値は変わっていくけど、
guileとかのCのスタックをコピーする継続の実装を使ってbarを
SCM cont;
int bar() {
  int a=0,b,first;
  b = scm_make_continuation(&first);
  if (!first) { a = a+SCM_INUM(b); } else { cont = b; }
  return a;
}
としたら、何回contに飛んでもaは最初に作ったコピーから書き戻されるから
変わらないよね。どっちが正しいの?