Racket 从列表中获取偶数

Racket 从列表中获取偶数,racket,Racket,我是新手。我必须从列表中去掉所有的偶数我怎么能做到?例如,get even nums的123456789应该返回8642。 获得偶数“1 3 5 7 9应返回” 我真的不知道该怎么办。终于解决了,这是解决办法 (define (segregate lst) (let-values ([(e o) (partition even? lst)]) (list e))) Racket根本不是一种简单的语言以下代码可能更容易理解: (define (get-even-nums lst)

我是新手。我必须从列表中去掉所有的偶数我怎么能做到?例如,get even nums的123456789应该返回8642。 获得偶数“1 3 5 7 9应返回”


我真的不知道该怎么办。

终于解决了,这是解决办法

(define (segregate lst)
  (let-values ([(e o) (partition even? lst)])
    (list e)))

Racket根本不是一种简单的语言

以下代码可能更容易理解:

(define (get-even-nums lst)
  (let loop ((lst lst)
             (outlst '()))
    (cond 
      [(empty? lst) 
         outlst]
      [(even? (car lst))
         (loop (cdr lst)
               (cons (car lst) outlst))]
      [else 
         (loop (cdr lst) 
               outlst)] )))

理想情况下,当lst为空时,应该返回reverse outlst,但显然您希望以相反的顺序获得偶数。

您可以使用它。例如,过滤均匀?”1 2 3 4 5 6 7 8 9将返回'2 4 6 8。实现这一点的惯用方法是简单地使用Filternce。如果您将结果包装在列表中,您将得到8 6 4 2,而不是通过计算
(define (get-even-nums lst)
  (let loop ((lst lst)
             (outlst '()))
    (cond 
      [(empty? lst) 
         outlst]
      [(even? (car lst))
         (loop (cdr lst)
               (cons (car lst) outlst))]
      [else 
         (loop (cdr lst) 
               outlst)] )))