Common Lisp, Scheme Part 14
■ このスレッドは過去ログ倉庫に格納されています
0640デフォルトの名無しさん
2006/04/12(水) 10:06:37(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は最初に作ったコピーから書き戻されるから
変わらないよね。どっちが正しいの?
■ このスレッドは過去ログ倉庫に格納されています