次の関数の両方が構文的に末尾再帰関数であることがわかりますが、racketでは、どちらが実際に末尾再帰として扱われるか、またはその両方ですか? つまり、インタプリタによって末尾再帰として最適化されているかどうかです。
;;1
(define (foo i m s)
(if (< i m)
(foo (+ i 1) m (+ i s))
s))
;;2
(define (foo i m s)
(if (= i m)
s
(foo (+ i 1) m (+ i s))))
他の Lisp には別の答えがありますか?