过滤器是如何实现的?

fei*_*ngh 3 scheme filter

使用scheme函数需要有关此函数的帮助返回一个列表,其中包含满足给定谓词的给定列表的所有元素.例如,(filter (lambda (x) (< x 5)) '(3 9 5 8 2 4 7))应该返回(3 2 4).

wme*_*cer 6

filterb - 以防万一已有一个名为filter的函数.

(define filterb
    (lambda (pred lst)
      (cond ((null? lst) '())
            ((pred (car lst)) (cons (car lst) (filterb pred (cdr lst))))
            (else (filterb pred (cdr lst))))))
Run Code Online (Sandbox Code Playgroud)

虽然我确信它可以看起来更好看.


Ósc*_*pez 5

编写程序的简单方法filter

(define (my-filter pred lst)
  (cond ((null? lst) null)
        ((pred (first lst))
         (cons (first lst) (my-filter pred (rest lst))))
        (else (my-filter pred (rest lst)))))
Run Code Online (Sandbox Code Playgroud)

请注意,我将 procedure 命名为my-filter,因为名为 的内置过程filter已经存在,并且覆盖其定义并不是一个好主意。