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を一切使ったこと無いからしらんが
意味が分からないのですが。