原です。

In message "[ruby-list:13696] Re: iterator <-> cursor (Re: iterator for Dummies)"
    on 99/04/14, Inaba Hiroto <inaba / st.rim.or.jp> writes:
|
|稲葉です。

|class Cursor

|ですが、色んな使い方をしようとすると破綻します。例えば

ふーむ、なるほどそうかあ。


|SCMはトップレベルを超えた継続をきるようです。
|トップレベルが人間との会話系の場合と合わせているのかな
|と思いますが、本当の所はわかりません。

前田さんが同様な指摘 [ruby-dev:4076] をしていますね。
そして前田@リコーさんが [ruby-dev:4077] で答えていま
す。


|で、色々考えてCursorのcallccによる実装を作り直しました。
|先のやつよりちょっと面倒になって、さらに遅くなりました。
|
|class Cursor
|  def initialize(iter)
|    @iter = iter
|    @cont = nil
|  end
|
|  def next
|    callcc{|@cc|
|      @cont.call if @cont
|      @iter.call {|obj|
|        callcc{|@cont| @cc.call(obj) }
|      }
|      @cc.call(nil)
|    }
|  end
|end

ふーむ。なるほど!  シンプルなコードですね。しかし、やっぱり
callcc ってめまいを催させずにはおかない。(^^;

継続を2つ使ってピンポンにするというアイデアの Hole と類似点
も多い。ただ Hole は open という fork に似た仕組みを使う所が、
かっこいい様なわるい様な、、、