前田です。

At Fri, 23 Apr 1999 14:38:08 +0900,
 <toyofuku / juice.or.jp> wrote:
> > というよりは本来は戻らない方がSchemeのcallccの仕様のようです。
> 
>   ん、「戻らない」ですか。

はい。

豊福さんのコードだと無限ループになってしまうので、

>   def foo11()
>     z = $n + 20                # 1回目 120、2回目 220
>     callcc {|$c|} if $n == 100 # 1回目だけ calcc する

ここを

  if $n == 100 # 1回目だけ calcc する
    $c = callcc {|c| c}
  end


>     z = $n + 21                # 1回目 121、2回目 221
>   end
>   def foo2()
>     $c.call
>   end

ここを

def foo2()
  puts "$c.call"
  $c.call(nil) if $c
end

として試すと、

> で $c.call 直後の x,y,z は 3,111,121 ですか。

z: 121
y: 111
z: 221
y: 211
$c.call
z: 221
y: 211
z: 221
y: 211
$c.call
x: 3

となりました。

「戻らない」という仕様ならこれで合っているような気がするのですが、
よろしいでしょうか。

-- 
前田 修吾
call/ccを使ったコードって読むのが難しいですね(^_^;