0

在以下代码中,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)))))))
4

2 回答 2

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)))))))
于 2013-10-09T17:21:37.963 回答
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)))
于 2013-10-09T17:25:12.350 回答