Tail-Call 平方和递归函数 Racket

Tail-Call sum-of-squares-recursive function Racket

我正在尝试编写尾调用递归函数来查找列表中的平方和。我有一些有效的代码,但目前它是一个非尾调用函数。我如何将其更改为尾部?

(define sum-of-squares
  (lambda (lst)
    (if (null? lst)
        0
        (+ (* (car lst) (car lst)) (sumsquares (cdr lst)))
        )))

将累加结果的函数转换为尾递归的通常方法是将累加器移动到参数中。在下面的代码中,sum 参数累加平方和。

(define sum-of-squares
  (lambda (lst)
    (define recursive-sos
      (lambda (lst sum)
        (if (null? lst)
            sum
            (recursive-sos (cdr lst)
                           (+ (* (car lst) (car lst)) 
                              sum)))))
    (recursive-sos lst 0)))