((define (sum list)
(if(null? list)
0
(+(car list)(sum(cdr list)))))
(define (mean list)
(if(null? list)
0
(/ (sum list) (length list))))
(mean (list 1 2 3 4))
返回的均值显然是2 1/2但它应该是2因为10/5是2我该怎么做才能得到正确的均值??
代码是正确的。(list 1 2 3 4)
的和是10
,这个列表有四个元素,所以结果是2 1/2
。
您还应该添加一些空格以提高可读性,并且不要使用函数名来命名变量(在本例中为list
)。改进后的版本看起来像这样:
(define (sum lst)
(if (null? lst) 0
(+ (car lst)
(sum (cdr lst)))))
(define (mean lst)
(if (null? lst) 0
(/ (sum lst)
(length lst))))
测试:
(mean (list 1 2 3 4))
=> 2 1/2
注意,您也可以返回列表的总和:
> (apply + (list 1 2 3 4))
10