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名前付き関数を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 に答える