让我们说我想从球拍列表中获取所有偶数,我会做这样的事情:
(define (even lst)
(map (λ(x)
(if (even? x) (append x) (append '()) )) lst))
当我使用输入(even '(1 2 3 4))
时,实际得到的是'( () 2 () 4)
而不是'(2 4)
,这是所需的输出。
我有办法做到这一点吗?
答案 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))