首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在方案中计算平均值或包含字母的列表- Dr.Racket

在方案中计算平均值或包含字母的列表- Dr.Racket
EN

Stack Overflow用户
提问于 2017-02-18 00:08:45
回答 2查看 1.6K关注 0票数 1

我需要帮助创建一个函数,将计算一个列表的平均值,也可以在他们有字母。例如:

代码语言:javascript
复制
(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"

到目前为止,这就是我所知道的,但我得到了这个我不理解的错误:

代码语言:javascript
复制
(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)))

我收到的错误消息:

代码语言:javascript
复制
mcar: contract violation
expected: mpair?
given: #<void>

任何帮助都会得到极大的重视

EN

回答 2

Stack Overflow用户

发布于 2017-02-18 01:17:35

代码语言:javascript
复制
; 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))
票数 0
EN

Stack Overflow用户

发布于 2017-02-18 18:56:31

以下行出错:

代码语言:javascript
复制
(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的操作,如第三个示例中所示(当列表中没有数字时)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42302411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档