まつもと ゆきひろです
In message "[ruby-list:14015] Re: What is callcc? (Re: iterator <-> cursor)"
on 99/04/22, Shugo Maeda <shugo / netlab.co.jp> writes:
|> 「継続すると本来はすべてのスタックおよびローカル変数を復活する。
|> ただし現在の実装ではトップレベルのローカル変数とブロック変数は
|> 戻らない」
|
|というよりは本来は戻らない方がSchemeのcallccの仕様のようです。
|Rubyでパフォーマンスを落とさずにSchemeの仕様に合わせるのは難しそ
|うです。
そんなことはないです.それにこれをちゃんと直さないと
$n = 0
def foo()
x = 0
# binding
callcc {|$cont|}
puts "#$n) x = #{x}"
x = 1
exit if ($n+=1) == 2
$cont.call
end
foo
#0) x = 0
#1) x = 0
が,コメントアウトしたbindingの有無で挙動が変わるのでまずい
ですから,ちゃんと直さないと.結果としてschemeに合わせること
になると思います.で,今修正したら5行でした.あっけない.
んでもってパフォーマンスですが,検証してませんが,ほとんど変
わらないでしょう.
まつもと ゆきひろ /:|)