从Racket中的列表中选择某些项目

时间:2015-09-29 03:17:50

标签: list dictionary racket

让我们说我想从球拍列表中获取所有偶数,我会做这样的事情:

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

当我使用输入(even '(1 2 3 4))时,实际得到的是'( () 2 () 4)而不是'(2 4),这是所需的输出。

我有办法做到这一点吗?

1 个答案:

答案 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))