豊福@パパイヤです。

前田さん
>> 「継続すると本来はすべてのスタックおよびローカル変数を復活する。
>> ただし現在の実装ではトップレベルのローカル変数とブロック変数は
>> 戻らない」
>
> というよりは本来は戻らない方がSchemeのcallccの仕様のようです。

  ん、「戻らない」ですか。

とすると本来は

  def foo()
    $n = 100; x = 1; foo1() # 1回目
    $n = 200; x = 2; foo1() # 2回目
              x = 3; foo2();
  end
  def foo1()
    y = $n + 10 # 1回目 110、2回目 210
    foo11()
    y = $n + 11 # 1回目 111、2回目 211
  end
  def foo11()
    z = $n + 20                # 1回目 120、2回目 220
    callcc {|$c|} if $n == 100 # 1回目だけ calcc する
    z = $n + 21                # 1回目 121、2回目 221
  end
  def foo2()
    $c.call
  end

で $c.call 直後の x,y,z は 3,111,121 ですか。
---
                        豊福@パパイヤ
                        unbound / papaya.juice.or.jp
                        toyofuku / juice.or.jp