call/cc使ってみる2
前回はcall/ccの引数の引数(つまり継続)でfを束縛して、そのあとfを実行してみた。
実行した結果を一見すると、fは(lambda (a) (inc a))のような手続きに思えるけど、mapを使ったときにちょっと違った。
今回はfで束縛せずにcall/ccの中で継続を実行してみる。
実行した場合は、継続の引数がcall/cc全体の値となるんだったな、ってことで
gosh> ((lambda (n) (inc (call/cc (lambda (c) (c (twice n)))))) 3) 7
ヽ(`Д´)ノ フガー 継続実行する意味NEEEEEEEE!!!!
例が不適切で申し訳ない...orz
いや、ね、何を言いたいかっつーと、
前回のmapで「第2引数のリスト内の2がfに渡されることがない(→1をincした結果の2が即座に返る)」
って事と、
「call/ccで継続実行したら即座に引数が返る」
って事が、なんとなく関係あるように思えたんだけど勘違いですかそうですか。
あ、それと、
- 継続をいったん束縛して後で実行した場合
- call/ccの中で継続を実行した場合
で挙動が違うように感じられるなーとか思ってたけど、その辺の説明がズバリ
http://mayah.jp/article/2004/continuation
なのかな?もう一回読んでみよう...。