2015-09-29 51 views
2

比方說,我想從球拍列表中得到所有的偶數,我會做這樣的事情:當我使用的輸入(even '(1 2 3 4))我其實球拍從列表中選擇某些項目

(define (even lst) 
    (map (λ(x) 
     (if (even? x) (append x) (append '()))) lst)) 

得到的是'(() 2() 4)而不是'(2 4),這是所需的輸出。

有沒有一種方法可以做到這一點?

+3

不會吧'(過濾器甚至「(1 2 3 4) )'? – TessellatingHeckler

+0

過濾器是我正在尋找,謝謝。 –

回答

4

這裏有兩種解決方案:

#lang racket 

(define (keep-even xs) 
    (match xs 
    ;; pattern    template 
    [(cons (? even? x0) xs) (cons x0 (keep-even xs))] 
    [(cons   x0 xs)   (keep-even xs)] 
    ['()     '()])) 

(keep-even '(1 2 3 4 5 6 7 8)) 

的模式是常見的,所以標準庫有filter

(filter even? '(1 2 3 4 5 6 7 8))