3

(一般的に)継続が何であるかはわかったと思いますが、Schemeでどのように使用されているのか理解できません。

この例を考えてみましょう(ウィキペディアcall / ccから)

(define (f return)
  (return 2)
  3)
(display (call/cc f)) ;=> 2

理由がわかりません:

  • 継続は暗黙的ですか?

  • この場合の継続はどうですか?

4

1 に答える 1

13

継続は、実行されないままの「残りの計算」です。あなたの特定の例では、これは値で塞がれる穴が(display [])どこにあるかと考えることができます。[]つまり、call/cc呼び出された時点で、まだ実行されていないのはdisplayの呼び出しです。

call/ccこの継続を取り、関数のように適用できる特別な値に入れます。この値を引数(ここf)に渡します。でf、継続はにバインドされreturnます。したがって、(return 2)基本的には継続にプラグイン2します。つまり、(display 2)

この例は実際にはあまり役に立たないと思います。継続について詳しく知りたい場合は、 PLAIを読む必要があると思います(パートVIIを参照)。もう1つの優れた情報源は、DanFriedmanによるこれらの講義ノートです。

于 2012-04-27T18:13:25.263 に答える