memo

うひゃー、これはちょっと眺めたくらいじゃとても理解するのは無理だ。


参考:

compile.scm, Intermediate tree form = IForm

gosh> (select-module gauche.internal)
#<undef>
gosh> (compile-p1 '(letrec ((fib (lambda (n)
				   (if (< n 2)
				       1
				       (+ (fib (- n 2)) (fib (- n 1)))))))
		     (fib 10)))
($letrec ((fib[3;0] ($lambda[fib;0] (n[3;0])
                      ($if ($asm (NUMLT2)
                             ($lref n[3;0])
                             ($const 2))
                        ($const 1)
                        ($asm (NUMADD2)
                          ($call ($lref fib[3;0])
                            ($asm (NUMSUB2)
                              ($lref n[3;0])
                              ($const 2)))
                          ($call ($lref fib[3;0])
                            ($asm (NUMSUB2)
                              ($lref n[3;0])
                              ($const 1)))))))
          )
  ($call ($lref fib[3;0])
    ($const 10)))
#<undef>