如何在Scheme中生成不能被3整除的数字列表?

时间:2018-10-29 11:51:01

标签: list filter scheme

我正在尝试生成无法被我选择的任何数字整除的数字列表,我应该使用filter过程,但是我不知道如何与2个过程zero?一起使用,并且remainder.这是我的审判:

(define (remove-divisible lst value)
  (filter zero? (remainder lst value)))

(define (remove-divisible lst value)
  (filter (zero? (remainder value)) lst))

但是很显然,由于过滤程序的结构,我得到了错误。如何正确使用它?

1 个答案:

答案 0 :(得分:2)

filter的第一个参数是一个函数,用于确定要保留还是过滤元素。

对于您而言,对于不能被给定值整除的数字,该函数应返回#t,对于可被其整除的数字,该函数应返回#f

这是一个帮助函数,可以根据需要生成此类函数:

(define (not-divisible-by divisor)
  (lambda (dividend)
    (not (zero? (remainder dividend divisor)))))

现在,定义所需的功能很简单:

(define (remove-divisible lst value)
  (filter (not-divisible-by value) lst))

当然,如果您愿意,可以跳过帮助程序功能:

(define (remove-divisible lst value)
  (filter (lambda (x) (not (zero? (remainder x value)))) lst))

我建议还是使用更具可读性的方法。