Gaucheプログラミング(立読み版) > 文法 > アルゴリズム > 継続


[Prev] [Next] [Up] [Contents][フレーム表示] [フレーム解除

継続 応援する 

継続(Continuation)とは次に行う処理のことです。

まずプログラムの制御について見てみましょう。

  gosh> (begin
             (print "first")
             (print "second")
             (print "third"))
  first
  second
  third
  #<undef>

これは三つの文字列を順に評価したものです。初めに"first"を表示し、次に "second"を表示、最後に"third"を表示するように書きました。 なぜ、print式をこのような順に書いたかというと、「begin式は渡された引数の 順(上から下へ)に式を評価する」と定義さてているからです。 もし渡された引数の順とは逆に評価されるようにbeginが定義されていれば、

  (begin 
    (print "third")
    (print "second")
    (print "first"))

と書いていたでしょう。他の例も見てみましょう。

例えば、「3と4を掛けた後に10を足す」という計算は以下のように書けます。

  gosh> (+ (* 3 4) 10)
  22
  gosh>

(* 3 4)が評価した後、その値と10が足されます。 +式の中の(* 3 4)を呼び出した後に自分のところへ値が返ってくる、ということは当り前のことかも知れません。しかし、このように手続きを呼び出し、その返り値が自分のところへ返ってくるのは、処理系がサポートしているからなのです。

言語によっては、呼び出し元の関数が分からず呼び出したらもう戻ってこ ないものもあります。呼び出し元の関数に値が返ってくるのは、どこから自分を呼び出したのかという情報をどこかで管理し、呼び出された側はその 情報を元に値を返すという決まりがあるからです。 この、次にどこへ移動するかを示す情報のことを継続と言います。

継続は言語の内部で処理され、表に出ることはなかなかありません。しかし、Schemeではこの継続を他の数値や手続きのようなオブジェクトと同様に 扱うことができるのです。次で説明するcall-with-current-continuationが その継続を扱う手続きです。


[Prev] [Next] [Up] [Contents][フレーム表示] [フレーム解除

Subtitles


このサイトについて|ヘルプ|Q&A|個人情報保護|プライバシーポリシー|利用規約|コメント・トラックバック規約|削除規程|広告掲載
Copyright (c) 2005-2007 Time Intermedia Corporation