如何在球拍中定义我自己的过滤程序版本?
How to define my own version of filter procedure in racket?
我是 Racket 的新手,我被分配做 我自己的过滤器 程序。它的工作方式应该类似于 Racket 过滤器程序。目前,my-filter 有两个参数:检查列表中项目的 even 过程和项目列表。
到目前为止,我只能检查列表中的项目是否均匀。 my-filter 应该遍历数字列表,检索偶数并将它们保存在第二个列表中。如何遍历列表并将偶数存储在第二个列表中?
(define (my-filter f lst)
(if (empty? lst)
empty
(cons
(f (first lst))
(my-filter f (rest lst)))))
> (my-filter even? '(1 2 3 4 5 6))
'(#f #t #f #t #f #t)
您需要考虑三种情况:
- 输入列表为空 -> 我们完成了。
- 当前元素满足谓词函数 -> 将其添加到输出并继续下一个元素。
- 当前元素不满足谓词函数 -> 跳过它并继续下一个元素。
您将最后两个案例混合为一个案例。请注意,您不能将 (f (first lst))
添加到输出中,这只是我们要评估的条件,我们应该添加 (first lst)
来代替。这就是我的意思:
(define (my-filter f lst)
(cond ((empty? lst) empty)
((f (first lst))
(cons (first lst) (my-filter f (rest lst))))
(else (my-filter f (rest lst)))))
它按预期工作:
(my-filter even? '(1 2 3 4 5 6))
=> '(2 4 6)
我是 Racket 的新手,我被分配做 我自己的过滤器 程序。它的工作方式应该类似于 Racket 过滤器程序。目前,my-filter 有两个参数:检查列表中项目的 even 过程和项目列表。
到目前为止,我只能检查列表中的项目是否均匀。 my-filter 应该遍历数字列表,检索偶数并将它们保存在第二个列表中。如何遍历列表并将偶数存储在第二个列表中?
(define (my-filter f lst)
(if (empty? lst)
empty
(cons
(f (first lst))
(my-filter f (rest lst)))))
> (my-filter even? '(1 2 3 4 5 6))
'(#f #t #f #t #f #t)
您需要考虑三种情况:
- 输入列表为空 -> 我们完成了。
- 当前元素满足谓词函数 -> 将其添加到输出并继续下一个元素。
- 当前元素不满足谓词函数 -> 跳过它并继续下一个元素。
您将最后两个案例混合为一个案例。请注意,您不能将 (f (first lst))
添加到输出中,这只是我们要评估的条件,我们应该添加 (first lst)
来代替。这就是我的意思:
(define (my-filter f lst)
(cond ((empty? lst) empty)
((f (first lst))
(cons (first lst) (my-filter f (rest lst))))
(else (my-filter f (rest lst)))))
它按预期工作:
(my-filter even? '(1 2 3 4 5 6))
=> '(2 4 6)