toyofuku / juice.or.jp wrote: > > 豊福@パパイヤです。 > y と z の print をどこに入れたのかわからないでまだ答え > られないのですが、ともかく私が確認したかったのは一回目の > foo11 までのスタックと二回目の foo11 までのスタックは別の > スタックになるのだろう、別のスタックなら二回目の foo11 で > のローカル変数の値の変更は $c.call に影響を与えないのでは > ということです。 自分の1.3.3での実験では、豊福さんの考えられているとおりのようです。 % cat callcc-toyofuku3.rb def foo() $n = 100; x = 1; foo1(); p "x = #{x}" # 1回目 $n = 200; x = 2; foo1(); p "x = #{x}" # 2回目 x = 3; foo2(); p "x = #{x}" end def foo1() y = $n + 10 # 1回目 110、2回目 210 foo11(); p "y = #{y}" y = $n + 11 # 1回目 111、2回目 211 end def foo11() z = $n + 20 # 1回目 120、2回目 220 p $n==100 ? "callcc true" : "callcc false" $c = callcc {|c|c} if $n == 100; p "z = #{z}" z = $n + 21 # 1回目 121、2回目 221 end def foo2() p "$c.call " + ($c ? "true" : "false") $c.call(nil) if $c end foo % ruby -v ruby -v callcc-toyofuku3.rb ruby 1.3.3 (1999-04-20) [i686-linux] "callcc true" "z = 120" "y = 110" "x = 1" "callcc false" "z = 220" "y = 210" "x = 2" "$c.call true" "z = 121" "y = 111" "x = 3" "callcc false" "z = 220" "y = 210" "x = 2" "$c.call false" "x = 3" ちなみにscm 5d0でもcallcc後 z = 121 y = 111 x = 3 のようです。 -- 稲葉 浩人 <inaba / st.rim.or.jp>