计划在整个计划中维护价值

时间:2013-10-09 17:02:19

标签: function scheme constants

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

2 个答案:

答案 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)))