2016-12-12 3 views
0

Стандартное отклонение списка целых чисел в схеме.Стандартное отклонение схемы

написать два выражения для решения этой проблемы:

  • Первое выражение, вычислить сумму квадратов разности между> каждое число и население в среднем
  • Во-вторых, с помощью этого числа вычислить стандартное отклонение ,

Мой код до сих пор:

(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").

Я только начал схему неделю назад, поэтому я не очень хорошо знаком с ней, вы видите, что не так с моим кодом? и как это исправить, также есть ли более простой способ сделать это, возможно, с mapping, как я упростил average с apply?

+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

Смежные вопросы