From: maeda@... Date: 1999-01-08T16:00:19+09:00 Subject: [ruby-list:11513] Re: call/cc 前田@リコーです。 >>>>> In article , >>>>> shugo@aianet.ne.jp (Shugo Maeda) writes: 前田さん> これが無限ループにならないのはどういう仕組なんでしょう。 「トップレベルに戻る」というcontinuationだからです。 call/ccから戻った後やるべき仕事は (write 3) (write 4) beginのとじ 結果をprint 次のread-eval-printループへ続く であり、 > 1234guile> foo の「34」で一回目が実行されています。 fooのevalでこの後半がもう一度実行されるわけです。 前田さん> トップレベルだけ特別なのかな。 こっちの例の場合は、 (write 3) (write 4) beginのとじ (foo #t)を実行 beginをとじ 結果をprint 次のread-eval-printループへ続く がfooに設定されているため、fooの実行中にもう一度fooが呼び出され ます。そんでこれがrecursionにならずにgotoになるのがcontinuation。 例えば、 (* 2 (call/cc (lambda (c) (set! foo c) 3) てやると6と表示され(lambdaから3を返しているから)、その後 (foo 8) => 16 (foo 32) => 64 のように使うことができます。(と思いますが手元に処理系がないので 試してはいません)。 ------------------------------- Vulture LRM20 .□||□. LRM20 前田 薫 maeda@src.ricoh.co.jp 75t 175km/h Md+ o'□||□`o Md+ (株)リコー ソフトウェア研究所 HeatSink 18 LG Sm+ .=X~~X=. Sm+ LG ------------------------------- Armor 2195 _|_ _|_