next up previous
Next: 9 Continuation操作機構をもつSchemeインタプリタ Up: 8 Continuation(継続) Previous: 8.5 Call/CCによる自動バックトラック

8.6 Resetの実現

インタプリタのトップレベルに戻るreset手続きを call/ccを用いると,以下のように実現できます.

<cl> (scheme-interpreter)
==> (call/cc
       (lambda (cc)
         (set! reset
             (lambda ()
                (cc "back to top level")))))

#<Interpreted Closure ...> 

==> (reset)

"back to top level" 

==> (list (display 1) (display 2) (reset) 3)
12
"back to top level" 

==>
以下のように,resetを定義する場所が手続きの中であった場合には,

<cl> (scheme-interpreter)

==> (define (test)
      (display 1)
      (call/cc
        (lambda (cc)
           (set! reset (lambda ()
                          (cc "back to top level")))))
      (display 2))

TEST 
==> (test)
12
2 
==> (reset)
2
2
というような結果となります.

generated through LaTeX2HTML. M.Inaba 平成18年5月6日