call/cc が意味わからん。。。orz
call/ccを勉強ちゅ。
こことか
http://www.shido.info/lisp/callcc.html
ココなんかを見ながら勉強中です
http://www.geocities.jp/m_hiroi/clisp/clispb14.html
でも、こんなコードがあった時、
㏄ に何が入るのかわからない。><;
(define *save* '()) (define fact (lambda (x) (if (= x 1) (call/cc (lambda (cc) (set! *save* cc) 1)) (* x (fact (- x 1))))))
スタックに積まれた lambda式 を
順番に見ていくとそれっぽい感じなので
スタックを上がるときに ㏄ に cons すればいいのかな?
(fact 3) (* 3 (fact (- 3 1))) (* 3 (* 2 (fact (- 2 1)) ; ここでcall/cc ; lambda の 最後の1が 評価された値になる (call/cc (lambda (cc) (set! *save* cc) 1) ⇒ 1 (* 3 (* 2 (1)) (* 3 (2)) (6) ;(cons 1 cc) ;(cons (* 2) cc) ;(cons (* 3) cc) ;ここでcall/cc の本体が呼ばれる、、、のかな? :((lambda (cc) (set! *save* cc)) '(* 3 (* 2 (1)))
もうだめだーねるー