原です。

In message "[ruby-list:13688] What is callcc? (Re: iterator <-> cursor)"
    on 99/04/13, toyofuku / juice.or.jp <toyofuku / juice.or.jp> writes:
|
|  豊福@パパイヤです。
|
|> class Cursor
|>   def initialize(iter)
|>     @iter = iter
|>     @cont = nil
|>   end
|> 
|>   def next
|>     @cont.call if @cont
|>     @iter.call {|obj|
|>       callcc{|@cont| return obj }
|>     }
|>     nil
|>   end
|> end
|
|  callcc の話はときどき目にしてきましたし、この例の意味もわかる
|ような気もするのですが callcc のはっきりした仕様を未だに知りません。
|この際だから聞いておきましょう。
|
|  callcc って何ですか。

私が答えるのも何なんですが、、、、

|この例の
|・|@cont| に渡されるものは何ですか。

これが「継続」ってやつですね。

|・ / cont.call では何が起きますか。

「継続」を継続します。(^^; もう少し言うと

    callcc { |cont| .... }

を実行すると、callcc の直前の状態(変数の割り当てとかループ
カウンタとか。オブジェクトの状態ではない。)を記憶して cont
に代入し、.... を実行します。cont の指しているこのオブジェク
トは Continuation クラスのインスタンスであり、これに .call(x)
すると x を callcc の返り値として、先に記憶した状態を復元し、
callcc の後に実行が移ります。

で、いいのかなあ。

無限ループを作るとこんな感じ、

def Loop
  callcc {|c| $c = c }
  yield
  $c.call
end

Loop { print "hello\n" }

です。