scheme で,階乗を末尾再帰で書こうと思って

(define (fact n)
(letrec (((fact-sub a n)
(if (= n 0) a
(fact-sub (* a n) (- n 1)))))
(fact-sub 1 n)))

こんなふうにしたらうまくいきません.なんで?