Всегда ли рекурсивная функция в Scheme оптимизирована для хвостового вызова?

I ' Я читал кое-что об оптимизации хвостового вызова в Scheme. Но я не уверен, понимаю ли я концепцию хвостовых вызовов. Если у меня есть такой код:

(define (fac n)
  (if (= n 0)
      1
      (* n (fac (- n 1)))))

, можно ли его оптимизировать, чтобы он не занимал стековую память? или оптимизацию хвостового вызова можно применить только к такой функции:

(define (factorial n)
    (let fact ([i n] [acc 1])
      (if (zero? i)
          acc
          (fact (- i 1) (* acc i)))))
5
задан Patrick Brinich-Langlois 3 April 2012 в 07:27
поделиться