fuckin'
;;mzscheme (require (lib "trace.ss")) (define save '()) (define (fact2 x) (if (= x 1) (call/cc (lambda (cc) (set! save cc) 1 ) ) (* x (fact2 (- x 1))) ) ) (trace fact2) ;begeinはプロンプト見にくいから (begin (newline) (fact2 10) ) (begin (newline) (save 1) (save 2) )
saveにはx=1の時のトップレベルまでの脱出経路がsetされる..と。
>
(fact2 10) (fact2 9) (fact2 8) (fact2 7) (fact2 6) (fact2 5) (fact2 4) (fact2 3) (fact2 2) (fact2 1) 1 2 6 24 120 720 5040 40320 362880 3628800 3628800
>
1 ;(cc)に1がセットされてトップレベルまで戻っていく 2 6 24 120 720 5040 40320 362880 3628800 2 ;(cc)に2がセットされてトップレベルまで戻っていく 4 12 48 240 1440 10080 80640 725760 7257600 7257600
gotoってこんな感じなのか?gotoを一切使ったこと無いからしらんが
意味が分からないのですが。