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

标签 list filter scheme

我正在尝试生成一个不能被我选择的任何数字整除的数字列表,我应该使用 filter 过程,但我不知道如何使用 2 个过程 零?余数。这是我的试验:

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

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

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

最佳答案

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))

不过,我建议使用更具可读性的方法。

关于list - 如何在Scheme中生成不能被3整除的数字列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53044934/

相关文章:

filter - java.lang.NoClassDefFoundError : org/apache/hadoop/hbase/filter/Filter 错误

macros - CL 样式宏中的多个(定义)

Python 列表中的 append 元素随着其原始变量的变化而变化

python - 在 Python 中分隔列表元素

filter - tcpdump 过滤器 src dst 端口

grails - 在 Grails 2 Web 应用程序过滤器中定义多个不同的 URI

scheme - 是否有检测方案实现的标准方法?

scheme - 方案中的(汽车列表)类型

list - 如何在 Racket 中创建一个可以按照添加元素的顺序进行迭代的列表?

python - 获取列表中最长重复序列的开始和结束索引