(一般的に)継続が何であるかはわかったと思いますが、Schemeでどのように使用されているのか理解できません。
この例を考えてみましょう(ウィキペディアcall / ccから)
(define (f return)
(return 2)
3)
(display (call/cc f)) ;=> 2
理由がわかりません:
継続は暗黙的ですか?
この場合の継続はどうですか?
(一般的に)継続が何であるかはわかったと思いますが、Schemeでどのように使用されているのか理解できません。
この例を考えてみましょう(ウィキペディアcall / ccから)
(define (f return)
(return 2)
3)
(display (call/cc f)) ;=> 2
理由がわかりません:
継続は暗黙的ですか?
この場合の継続はどうですか?
継続は、実行されないままの「残りの計算」です。あなたの特定の例では、これは値で塞がれる穴が(display [])
どこにあるかと考えることができます。[]
つまり、call/cc
呼び出された時点で、まだ実行されていないのはdisplayの呼び出しです。
call/cc
この継続を取り、関数のように適用できる特別な値に入れます。この値を引数(ここf
)に渡します。でf
、継続はにバインドされreturn
ます。したがって、(return 2)
基本的には継続にプラグイン2
します。つまり、(display 2)
。
この例は実際にはあまり役に立たないと思います。継続について詳しく知りたい場合は、 PLAIを読む必要があると思います(パートVIIを参照)。もう1つの優れた情報源は、DanFriedmanによるこれらの講義ノートです。