有没有办法在这里使用lambda?

时间:2013-11-11 23:07:15

标签: lambda scheme racket

(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

1 个答案:

答案 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 - 一个不会在别处使用的功能。另一方面,如果该函数将在多个地方重复使用,则将其命名并按名称引用它。

相关问题