2013-11-11 2 views
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

Конечно, просто заменить указанную функцию 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, когда вам нужна функция с одним выстрелом - функция, которая не будет использоваться в другом месте. С другой стороны, если функция будет повторно использоваться в нескольких местах, тогда назовите ее и обратитесь к ней по имени.

Смежные вопросы