原です。
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 に似た仕組みを使う所が、
かっこいい様なわるい様な、、、