返回平均赔率的Scheme函数
我试图创建一个scheme函数,它将返回列表中奇数的平均值。比如说返回平均赔率的Scheme函数,scheme,racket,Scheme,Racket,我试图创建一个scheme函数,它将返回列表中奇数的平均值。比如说 (avg-odd 4 5 5 5 5 5) 我将返回5。这就是我目前所拥有的 (define avg-odd (lambda vals (if (odd? x) (/(apply + vals) (length vals))))) 运行时,它会显示缺少else表达式。请提供帮助。is的语法(如果是test expr,那么是expr else expr),因此所有表达式必须如下所示: (如果(奇数?
(avg-odd 4 5 5 5 5 5)
我将返回5。这就是我目前所拥有的
(define avg-odd
(lambda vals
(if (odd? x)
(/(apply + vals) (length vals)))))
运行时,它会显示缺少else表达式。请提供帮助。is的语法(如果是test expr,那么是expr else expr),因此所有表达式必须如下所示:
(如果(奇数?5)“奇数”“偶数”)
。
在您的示例中,缺少else expr部分。如果您需要condition而不需要else expr,请使用,它可以具有以下形式:
(当(奇数?5)“奇数”)
实际上,这里不需要它们。您需要过滤所有奇数,然后计算平均数。您可以使用内置功能: 或者编写自己的过滤函数:
(define filter-odd (lambda (lst)
(cond ((null? lst) lst)
((odd? (car lst)) (cons (car lst)
(filter-odd (cdr lst))))
(else (filter-odd (cdr lst))))))
(define avg-odd (lambda vals
(let ((odd-vals (filter-odd vals)))
(if (null? odd-vals) 0
(/ (apply + odd-vals)
(length odd-vals))))))
(avg-odd 4 5 5 5 5 5)
if
需要一个“真”分支和一个“假”分支,而您只有一个“真”分支。也没有
x
可以传递到odd?
,并且(/(应用+vals)(长度vals))
是整个列表的平均值
这个练习的目的是训练你思考“我昨天写了一个函数来计算一个列表的平均值,所以如果我有一个只有奇数的列表,我可以使用这个函数,今天可以做更少的工作”
如果遇到过滤器
,则应使用以下方法:
(define (avg-odd ls) (avg (filter odd? ls)))
是否尝试添加else表达式以匹配if?
(define (avg-odd ls) (avg (filter odd? ls)))