2012-04-27 5 views
3

私は、継続が(一般的に)何かを持っていると思いますが、Schemeでどのように使用されているのか理解できません。スキームの継続

  • 継続が暗黙的である右:?

    は、私は理由を理解することはできません

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

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

  • この場合、どのように続行されますか?

答えて

12

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

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

この例は実際には非常に参考になるとは思わないので、継続性について詳しく知りたい場合はPLAIとお読みください(パートVIIを参照)。別の良い情報源はDan Friedmanのthese lecture notesです。

+1

また、コードを継続的に渡すスタイルになるとき。以下は、Friedman教授のプログラミング言語コースでオンラインで公開されている講義ノートです。 https://www.cs.indiana.edu/cgi-pub/c311/lib/exe/fetch.php?media=cps-notes.scm –

関連する問題