在以下代码中,avg和avg2的值随着代码的进展而变化。我怎样才能使值在整个函数中保持不变而不在函数外定义它们?我应该使用辅助功能吗?
(define (covariance-list x y)
(let ((avg (average x)))
(let ((avg2 (average y)))
(if (null? x)
'()
(cons (* (- (car x) avg)(- (car y) avg2))
(covariance-list (cdr x) (cdr y)))))))
答案 0 :(得分:3)
我认为你不希望它们保持不变,因为它们依赖于函数的参数。您可能只是希望在每次递归调用期间不重新计算它们。
(define (covariance-list x y)
(let ((avg (average x))
(avg2 (average y)))
(let loop ((x x)
(y y))
(if (null? x)
'()
(cons (* (- (car x) avg)
(- (car y) avg2))
(loop (cdr x) (cdr y)))))))
答案 1 :(得分:1)
一种方法是使用辅助功能:
(define (covariance-list x y)
(define (covariance-list-aux x y avg-x avg-y)
(if (null? x)
'()
(cons (* (- (car x) avg-x) (- (car y) avg-y))
(covariance-list-aux (cdr x) (cdr y) avg-x avg-y))))
(covariance-list-aux x y (average x) (average y)))