清单中每个元素的球拍调用功能

时间:2018-09-18 03:59:22

标签: list racket

我正在尝试编写一个函数,该函数需要一个除数列表,一个要测试的数字列表,并对除数列表中的每个元素都进行整除。我应该使用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))))]))

这似乎可行,但是当它只需要一个列表和一个整数作为参数时,如何对列表中的每个元素调用可整除感到困惑?

希望如此,谢谢

1 个答案:

答案 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确实可以完成您的代码,但是可以推广为应用任何过滤条件。