DrRacket - 显示列表中所有高于平均值的值
DrRacket - Display all the values in a list that are above average
我正在创建一个函数,它使用数字列表并生成列表中高于平均水平的元素。
下面是我的代码:
(define (listlength list)
(cond
((empty? list) 0)
(else (+ 1 (listlength (rest list))))))
(define (listsum list)
(cond
[(empty? list) 0]
[else (+ (first list)
(listsum (rest list)))]))
(define (average log)
(/ (listsum log) (+ (listlength log) 1)))
(define (average-filter log)
(cons
(cond
[(> (first log) (average log)) (first log)]
[else (average-filter (rest log))])))
很明显我的代码有问题...有人可以帮助我吗?
(average-filter (cons 40 (cons 30 empty)) 的错误信息是:
cons: expects 2 arguments, but found only 1
几点说明:在average
过程中,分母不需要加1,但分母为零时应该处理。另请注意,您可以通过仅计算 average
一次来改进您的解决方案,它对于输入列表是相同的,因此您不需要在每次迭代时都重新计算它。并且请不要调用您的参数 list
或 log
,它们会与现有程序冲突。
现在关于 average-filter
的真正问题:它与您上一个问题的错误相同,您必须 而不是 将 cons
部分放在开头,这不是它的工作原理。您应该使用当前元素 和递归调用的结果 调用 cons
,以构建包含结果的列表。而你必须有一个基本情况,想一想:当你运行没有要遍历的元素时会发生什么?那就是你需要 return 一个空列表的地方:
(define (average-filter lst)
(cond
[(empty? lst) empty]
[(> (first lst) (average lst))
(cons (first lst) (average-filter (rest lst)))]
[else (average-filter (rest lst))]))
请花一些时间研究通过遍历输入列表构建输出列表的正确方法,注意您需要:
- 处理输入列表为空的情况。
cons
具有递归调用结果的当前元素,当这样做有意义时。
我正在创建一个函数,它使用数字列表并生成列表中高于平均水平的元素。 下面是我的代码:
(define (listlength list)
(cond
((empty? list) 0)
(else (+ 1 (listlength (rest list))))))
(define (listsum list)
(cond
[(empty? list) 0]
[else (+ (first list)
(listsum (rest list)))]))
(define (average log)
(/ (listsum log) (+ (listlength log) 1)))
(define (average-filter log)
(cons
(cond
[(> (first log) (average log)) (first log)]
[else (average-filter (rest log))])))
很明显我的代码有问题...有人可以帮助我吗? (average-filter (cons 40 (cons 30 empty)) 的错误信息是:
cons: expects 2 arguments, but found only 1
几点说明:在average
过程中,分母不需要加1,但分母为零时应该处理。另请注意,您可以通过仅计算 average
一次来改进您的解决方案,它对于输入列表是相同的,因此您不需要在每次迭代时都重新计算它。并且请不要调用您的参数 list
或 log
,它们会与现有程序冲突。
现在关于 average-filter
的真正问题:它与您上一个问题的错误相同,您必须 而不是 将 cons
部分放在开头,这不是它的工作原理。您应该使用当前元素 和递归调用的结果 调用 cons
,以构建包含结果的列表。而你必须有一个基本情况,想一想:当你运行没有要遍历的元素时会发生什么?那就是你需要 return 一个空列表的地方:
(define (average-filter lst)
(cond
[(empty? lst) empty]
[(> (first lst) (average lst))
(cons (first lst) (average-filter (rest lst)))]
[else (average-filter (rest lst))]))
请花一些时间研究通过遍历输入列表构建输出列表的正确方法,注意您需要:
- 处理输入列表为空的情况。
cons
具有递归调用结果的当前元素,当这样做有意义时。