2016-12-12 1 views
0

Scheme에서 정수 목록의 표준 편차.Scheme Programming 표준 편차

쓰기이 문제를 해결하기위한 두 개의 식 :

  • 먼저 표현 간의 차이의 제곱의 합을 계산>를 각각 수 평균 인구
  • 둘째, 그 번호를 사용하여 표준 편차를 계산 . 지금까지

내 코드 :

(define (average lst) 
    (/ (apply + lst) (length lst))) 

(define (std-dev lst) 
    (sqrt 
     (/ 
      (innerFunction lst (average lst)) 
      (length lst) 
     ) 
    ) 
) 

(define (innerFunction lst avg) 
    (if 
     (null? lst) 
     0 
     (+ 
      (* 
       (- (car lst) avg) 
       (- (car lst) avg) 
      ) 
      (innerFunction (cdr lst) average) 
     ) 
    ) 
) 

(오류가 이다 "숫자 필요하지만 가지고 #Closure").

저는 일주일 전에 Scheme을 시작 했으므로 익숙하지 않습니다. 코드에 어떤 문제가 있습니까? 어떻게 해결할 수 있습니까? 또한 mapping과 같이 단순화 된 방법이 더 간단합니다. averageapply으로 변경 했습니까?

+0

"innerFunction"== "sum-devs-squared"또는 이와 비슷한 것. 간단한 경험 법칙 : * 기능을 의미있는 이름으로 지정하고, 짧은 약어 (의도가 명확한 한 글자까지)로 * 변수 이름을 지정하십시오. --- 네, 당신의'innerFunction'은'map'에 대한 호출로서 코딩 될 수 있습니다. –

답변

0

마지막 줄에 숫자가 아닌 프로 시저를 전달하고 있습니다. 이것을 시도하십시오 :

(define (innerFunction lst avg) 
    (if (null? lst) 
     0 
     (+ (* (- (car lst) avg) 
      (- (car lst) avg)) 
      (innerFunction (cdr lst) avg)))) ; here was the error 
+0

답변을 확인하는 데 충분한 점수가 없지만 감사합니다. 미친 얼마나 작은 오류가 있었는지, 당신의 솔루션이 작동 :) – Anonymous