タグ

coroutineとcontinuationに関するnabinnoのブックマーク (2)

  • 継続 - 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文を持つ言語に意味論を与

  • 継続こわくない(RubyでFiberを使ったコードをcallccで書きなおしてみた) - 方向

    Fiberに関するこんな記事をみて、 そういえば以前30分でわかるcallccの使い方で、 callccの代表的な使い方は * (A) 処理の中断/再開 (generator, wait_ok) * (B) 処理のやり直し (amb, ppp) の2通りが挙げられる。 callccが危険なのは(B)ができてしまうからだ。じゃあ(A)の機能だけなら残してもいいかも?ということで、Ruby 1.9ではFiberという機能が検討されている。 と書いてあったのを思い出して、「Fiberはcallccの抽象化ってことか……じゃあFiberのコードはcallccで書き直せるのかな?」 と思い試してみました。 Fiberのコード はこべにっき#より、改変 require 'fiber' def count() n = 0 Fiber.new do loop do Fiber.yield n n += 1

  • 1