継続

最初の継続がどこからやってくるのかがわからない。

あと「returnのかわりに継続をコールすればいい」というはなしは、末尾呼び出しの最適化がない言語で文字通りの実装にするとスタックオーバーフローを起こしてしまいそう(><。。

> (define call/cc call-with-current-continuation)
> (begin (display "[") 
         (display 2) 
         (display "]"))
[2]
> (define cont ())
> (begin (display "[") 
         (display (call/cc (lambda (c) (set! cont c) 2)))
         (display "]"))
[2]
> cont
#<continuation>
> (cont 5)
5]
> (main)
```.3`.2`.1`ci.4v
12312344(v)
> (+ 1 2)
3
> (+ (call/cc (lambda (x) (set! cont x) 1)) 2)
3
> (cont 5)
7
> (cont 10)
12
> (+ (call/cc (lambda (x) (set! cont x) 1)) (begin (display "hoo") 2))
hoo3
> (cont 10)
hoo12

うーん。おとうとの評価をするところから継続するんだね。。。むずかしい。どうやったらcall/ccのない言語でcall/ccをエミュレートできるんだろう。