タグ

continuationに関するhigeponのブックマーク (6)

  • 僕でもわかる継続と部分継続 - まめめも

    callcc と shift/reset についてわかるとこだけ書いてみます。 継続 callcc という操作は、現在から実行終了まで、継続をまるごと取り出します。例題。 p [1] + callcc {|k| [2] + k.call([3]) } #=> [1, 3] callcc では callcc がリターンしてから実行終了するまでの継続 k が取り出せます。k.call([3]) で継続が呼ばれると、いきなり「callcc が [3] を返した瞬間」に実行が飛びます。つまりこんな感じ。 p [1] + [3] あとは自明ですね。"[2] +" のあたりは無視されます。 部分継続 shift という操作は、現在から reset まで、継続の一部だけを取り出します。この継続の一部を部分継続といいます。例題。 p [1] + reset { [2] + shift {|k| [3] +

    僕でもわかる継続と部分継続 - まめめも
  • http://www.fastwave.gr.jp/diarysrv/arino/200110c.html

    higepon
    higepon 2006/12/22
    arinoさんの継続について
  • Gauche - A Scheme Interpreter

    VMのスタック操作 (未完) GaucheのVMはごく単純なスタックマシンである。 だが、Schemeの場合、first class continuationを実現するために、 スタックフレームがヒープにセーブされたり、逆にヒープからスタックに復元されたりという 操作が入って来るので、うっかりすると自分でも混乱してバグを持ち込むことがある。 後で思い出せるように、ここに整理しておこう。 基レジスタ スタック操作に深くかかわるのは次のレジスタ群。 ScmEnvFrame *env 現在の環境のトップ。いわゆるstatic link。直接には、 最も内側の静的スコープで見えている環境を指している。 upポインタをたぐってゆけば上の環境に行ける。upポインタはNULLで終端される。 ScmContFrame *cont 現在のコンティニュエーションフレームのトップ。 いわゆるactivatio

  • Scheme/継続 - Wikibooks

    Schemeは継続(continuation)という、たいへん強力で柔軟な制御機構を備えています。継続を用いれば大域脱出、コルーチン、疑似マルチタスク、バックトラックといった特殊な制御を必要とするプログラムを効率的に記述することができるのです。しかし一方でその抽象度の高さから、「継続は難しいもの」という印象も強いようです。 ここでは継続の正確な定義はとりあえず後に回し、直感的な観点から継続を導入してみたいと思います。 継続手続き[編集] 話を簡単にするため、今全ての手続きが1-in/1-outであるような1-Schemeというものを考えます。例えば: (define (double x) (* x x)) (double 2) => 4 (define (add1 x) (+ x 1)) (add1 2) => 3 のような手続きが1-Scheme手続きです。 (なおSchemeではlam

  • 11. 継続 | Schemeへの道

    継続(continuation)とは,式を評価している途中のある時点で,『いま得られた 値を使って,この後は何を計算するのか』を表すものである.たとえば,Scheme の関数呼びだしの式を評価する際には,まず関数とその引数を評価して,その 後で関数に引数を適用する. ==> (+ (* 1 2) (* 3 4)) ;; ==> (+ 2 12) ;; ==> 14 14 この式の場合,まず「+」,「(* 1 2)」,「(* 3 4)」を評 価したのち,「(+ 2 12)」を評価する. 各部分式の評価が左から右へ進むものとすると, たとえば,「(* 3 4)」を評価した後にするべき計算,つまり継続は, 『いま得られた値に2を加える』 である.この式の評価を完了するためには, Schemeのシステムは,この継続を知っていなければならない. 継続は,「何を評価して,その値によって次には何を行う」

  • 継続 - Wikipedia

    のようになる[3]。この式はすなわち、値 v を引数に取り、それに4を足した値を返す関数である。実際、この後 (+ 1 2) の計算結果が v に代入されて、4を足した値が最終的に計算結果が求められるため、この関数は確かに (+ 1 2) を評価する段階での「残りの計算」の表現である。 call/cc[編集] Schemeの call-with-current-continuation (call/cc と省略される) は、その時点での継続を引数として関数を呼び出す手続きである。Schemeの言語仕様書(R7RS[4])には「もっとも単純な例」として次のコードが載っている: このコードは、真正な(終端が空リストである)リストが渡された際にはそのリストの要素数を数えて返し、そうでない場合はfalse値を返す。 goto文を持つ言語の意味論[編集] 継続の概念はgoto文を持つ言語に意味論を与

  • 1