我无法使用map函数返回给定数字组偏差的平方列表。我写了我的偏差方函数如下,但我不知道如何映射这个。有没有办法纠正我的偏差平方函数,以便它不会将“l”作为参数?如果我写了这样的函数,那么我就知道如何映射它。
(define (square-of-deviation l)
(define (square-of-deviation-h n)
(if (null? n)
'()
(cons (expt (- (car n) (average l)) 2)
(square-of-deviation-h (cdr n)))))
(square-of-deviation-h l))
我编写了一个可用于映射的函数,但它要求我在测试代码时两次传递相同的列表:
(define (square-of-deviation-2 l)
(lambda (x) (expt (- x (average l)) 2)))
(map (square-of-deviation-2 '(1 2 3 4 5)) '(1 2 3 4 5))
我应该在这里改变我的地图功能吗?我写的如下:
(define (map f items)
(if (null? items)
'()
(cons (f (car items))
(map f (cdr items)))))
答案 0 :(得分:1)
试试这个:
(define lst '(1 2 3 4 5))
(define avg (average lst))
(define (square-of-deviation-2 x)
(expt (- x avg) 2))
(map square-of-deviation-2 lst)
请注意,您只需计算一次的平均值,因此您可以在调用map
之前执行此操作,因为map
的函数只需要一个值,依次是每个输入列表的元素。更好的解决方案是将所有内容打包在一个功能中:
(define (square-of-deviation lst)
(let ((avg (average lst)))
(map (lambda (x) (expt (- x avg) 2)) lst)))