我正在尝试编写一个函数,该函数需要一个除数列表,一个要测试的数字列表,并对除数列表中的每个元素都进行整除。我应该使用filter,map或foldl而不进行递归
我编写了拖放可分函数:
(define (drop-divisible l n)
(cond
[(empty? l) empty]
[(empty? (rest l)) l]
(let ([i (first l)])
(if (zero? (modulo i n))
(drop-divisible (rest l) n)
(cons i (drop-divisible(rest l)n))))]))
这似乎可行,但是当它只需要一个列表和一个整数作为参数时,如何对列表中的每个元素调用可整除感到困惑?
希望如此,谢谢
答案 0 :(得分:1)
当您需要“该列表中所有满足此类条件的元素之外的所有元素”时,filter
函数提供了一种简便的方法:
(define (drop-divisible l n)
(filter (λ (i) (not (zero? (modulo i n))))
l))
> (drop-divisible '(4 6 9 8 12 14) 3)
'(4 8 14)
filter
构造一个新列表,仅包含符合您条件的原始列表中的项目。 filter
的第一个参数是一个函数,该函数采用列表的单个元素,如果在创建新列表时应跳过该元素,则返回#f
,并返回任何其他值以将该元素包括在列表中。新清单。 filter
的第二个参数是要过滤的列表。
换句话说,filter
确实可以完成您的代码,但是可以推广为应用任何过滤条件。