1
(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

4

1 回答 1

4

当然,只需将f命名函数替换为 a 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当您需要一次性功能时,您应该使用 a - 一个不会在其他地方使用的功能。另一方面,如果该函数将在多个地方重用,则命名它并按名称引用它。

于 2013-11-11T23:24:42.453 回答