[问题] call/cc 变量的值 印出的结果应该是?

楼主: suhorng ( )   2013-01-11 00:45:47
各位好
因为实在搞不懂 call/cc 以及一些环境, scope 的问题, 想要请教一下
(define var 0)
(let
((cont ( call/cc (lambda (k) (k k)) )))
(set! var (+ var 1))
(display var) (newline)
(cond ((< var 10) (define var 9) (display var) (newline) (cont cont))
(#t #t)))
以上这段程式 到底该输出什么呢?
若没有亮白色那段, 输出应该就是
1 1 2 2 ... 9 9 10
但是有亮白色这段 还会是这样吗? chicken 编译器跑出来变 1 9 10 @@
作者: ccshan (善终结)   2013-01-11 09:02:00
有亮白色这段 就等于有两个var "(define y 9) (display y)"所以结果应该是 1 9 2 9 3 9 4 9 5 9 6 9 7 9 8 9 9 9 10所以总结: scope不受call/cc影响, call/cc如同一般函数.
楼主: suhorng ( )   2013-01-11 11:30:00
谢谢!! 所以是他的实做出错了我也觉得会影响到很奇怪..使用cont的时候应该要把目前的evaluation context抛弃掉才对@@可是我也没有去研究 R^5RS 给的 formal semantics..

Links booklink

Contact Us: admin [ a t ] ucptt.com