From: Shin-ichiro Hara Date: 1999-04-14T02:21:42+09:00 Subject: [ruby-list:13703] Re: iterator <-> cursor (Re: iterator for Dummies) 原です。 In message "[ruby-list:13696] Re: iterator <-> cursor (Re: iterator for Dummies)" on 99/04/14, Inaba Hiroto 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 に似た仕組みを使う所が、 かっこいい様なわるい様な、、、