(define ( f x)
(* 2 x))
(define (mapit n)
(cond
[(empty? n) empty]
[(cons? n)
(map f (filter odd? n))]))
(check-expect (mapit (list 1 2 3 4 5 6 7 8))(list 2 6 10 14))
将此列表中的已过滤元素乘以2.是否可以在此处使用lambda
?我知道这不是必要的,但我正在尝试习惯lambda
答案 0 :(得分:4)
当然,只需将f
命名函数替换为lambda
,这是一个匿名函数:
(define (mapit n)
(cond
[(empty? n) empty]
[(cons? n)
(map (lambda (x) (* 2 x))
(filter odd? n))]))
很容易理解为什么我们可以在上面进行替换。请记住这一点:
(define (f x)
(* 2 x))
......等同于:
(define f
(lambda (x) (* 2 x)))
...在mapit
程序中,我们只需要将f
替换为相应的值。一般情况下:当你需要一次性功能时,你应该使用lambda
- 一个不会在别处使用的功能。另一方面,如果该函数将在多个地方重复使用,则将其命名并按名称引用它。