2013-10-09 5 views
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))))))) 

답변

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))) 
+0

당신은 평균-x와 평균-Y 재귀 적으로 모든 시간을 통과 피하려고한다. – uselpa

+0

@uselpa, 그들은 스택을 소비하기 때문에, 당신은 의미합니까? –

+0

변경 될 수 있다는 인상을 받으므로 (왜 반복해서 전달해야할까요?)하지만 그렇지 않습니다. – uselpa

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