【问题标题】:Scheme Programming Standard Deviation方案编程标准偏差
【发布时间】:2016-12-12 23:47:11
【问题描述】:

Scheme 中整数列表的标准偏差。

写两个表达式来解决这个问题:

  • 第一个表达式,计算 > 每个数字与总体平均值之差的平方和
  • 其次,使用该数字计算标准偏差。

到目前为止我的代码:

(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 来实现这一点,就像我如何使用apply 简化average 一样?

【问题讨论】:

  • "innerFunction" == "sum-devs-squared" 或类似的东西。简单的经验法则:给你的函数起有意义的名字,但是用简短的缩写来命名你的变量(即使是一个字母,意图很清楚)。 --- 是的,您的innerFunction 可以编码为对map 的调用。

标签: scheme


【解决方案1】:

您传递的是一个过程,而不是最后一行中的数字。试试这个:

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

【讨论】:

  • 我没有足够的分数来检查你的答案,但非常感谢你!疯狂的错误有多小,您的解决方案有效:)
猜你喜欢
  • 1970-01-01
  • 2014-04-27
  • 2017-09-26
  • 2014-05-09
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 2018-05-17
  • 1970-01-01
相关资源
最近更新 更多