我需要帮助创建一个函数,将计算一个列表的平均值,也可以在他们有字母。例如:
(mean '(1 2 3 4 5)); → 3
(mean '(1 a 2 b c d e 3)); → 2
(mean '(a b c d e)); → "Error: no numbers in list"到目前为止,这就是我所知道的,但我得到了这个我不理解的错误:
(define new_list '())
(define (mean lis)
(if (null? lis)
(display "Error: no numbers in list")
(avg(set! new_list (my-filter number? lis))) ;my-filter, filters out everything except numbers
)
)
(define (avg lis)
(/ (apply + lis) (length lis)))我收到的错误消息:
mcar: contract violation
expected: mpair?
given: #<void>任何帮助都会得到极大的重视
发布于 2017-02-18 01:17:35
; mean-of-numbers computes the mean of a list of numbers (only)
(define (mean-of-numbers xs) ...)
; mean computes the mean of the numbers of the list xs ignoring other values
(define (mean xs)
(mean-of-numbers (filter number? xs))发布于 2017-02-18 18:56:31
以下行出错:
(avg(set! new_list (my-filter number? lis))) ;my-filter, filters out everything except numbers你不需要设置!任何新的列表。您可以只将my-filter fn的结果传递给avg fn。
此外,if语句还会查找列表是否为空;如果列表中没有数字,则不会。因此,需要纠正错误消息(" error : no numbers in list")。
此外,avg函数应处理除以0的操作,如第三个示例中所示(当列表中没有数字时)。
https://stackoverflow.com/questions/42302411
复制相似问题