【问题标题】:Filter high-order function in SchemeScheme中过滤高阶函数
【发布时间】:2021-09-28 09:09:09
【问题描述】:

使用“过滤器”,我需要编写一个代码来创建一个名为 (count-zeros lst) 的过程,该过程计算一个数字中有多少个 0。样本输出: (count-zeros '(1 1 0 1 0 0)) 应该给出 3

(define filter (lambda (pred a-list)
    (if (null? a-list)
        '()
        (if (pred (car a-list))
            (cons (car a-list) (filter pred (cdr a-list)))
            (filter pred (cdr a-list)))))) 

(define (count-zeros lst)
  (filter zero? (length lst)))

我知道逻辑是正确的,但我在实现和使代码正常工作方面遇到了麻烦。请帮助我改进代码。

【问题讨论】:

  • 旁注:在真实的 Racket 代码中,您可以使用 count: (count (lambda (n) (= n 0)) a-list)

标签: scheme racket


【解决方案1】:

仔细阅读问题陈述,并将其与您写的内容进行比较:它说 count 零的数量,但您正在计算列表的长度 (它返回一个数字!),然后尝试从该数字中过滤掉零,这是没有意义的。反过来说:

(define (count-zeros lst)
  (length (filter zero? lst)))

首先我们只过滤零,返回一个列表,然后我们得到该列表的长度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多