我正在尝试生成无法被我选择的任何数字整除的数字列表,我应该使用filter
过程,但是我不知道如何与2个过程zero?
一起使用,并且remainder.
这是我的审判:
(define (remove-divisible lst value)
(filter zero? (remainder lst value)))
或
(define (remove-divisible lst value)
(filter (zero? (remainder value)) lst))
但是很显然,由于过滤程序的结构,我得到了错误。如何正确使用它?
答案 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))
我建议还是使用更具可读性的方法。