【问题标题】:How can I generate a list of numbers which are not divisible by 3 in Scheme?如何在 Scheme 中生成不能被 3 整除的数字列表?
【发布时间】:2018-10-29 23:16:08
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我自己找到了解决方案 :) 我不知道我们可以在过滤器主体中定义 lambda 表达式。

标签: list filter scheme


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-10
    • 2015-11-30
    • 2018-07-23
    • 1970-01-01
    • 2017-12-31
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多