Functional programming 我如何使用过滤器来称呼我的功能工厂?

Functional programming 我如何使用过滤器来称呼我的功能工厂?,functional-programming,scheme,racket,Functional Programming,Scheme,Racket,我在Scheme中创建了一个函数工厂,它接收一个二进制函数f,并将其调用到一个包含1个或多个变量的列表中 (define makeDoForAll (lambda (f) (define (helper a lst) (if (null? lst) a (if (null? (cdr lst)) (f a (car lst)) (helper (f a (car lst))

我在Scheme中创建了一个函数工厂,它接收一个二进制函数f,并将其调用到一个包含1个或多个变量的列表中

(define makeDoForAll
  (lambda (f)
    (define (helper a lst)
      (if (null? lst)
       a
       (if (null? (cdr lst))
           (f a (car lst))
           (helper (f a (car lst))
                   (cdr lst)))))

    (lambda (x . others)
      (helper x others))))
我想创建一个新函数,使用此函数工厂对给定列表中的所有偶数求和,以便
(sumEvens 1 2 3 4 5)
将输出6

实现过滤器时如何调用函数工厂
(偶数?x)

一些备注:

  • 嵌套的
    if
    最好写成
    cond
    表达式
  • 看起来您正在实现一个函数
您可以生成一个接受列表并同时执行过滤和添加的闭包,但最简单的方法是先过滤列表,然后对结果元素求和:

    (foldl + 0 (filter even? '(1 2 3 4 5)))
    => 6

请格式化您的代码。“f”应该进行过滤。我认为第二个论点是偶数,加在a上。如果不是,则返回一个未更改的。我怀疑它是否有效,因为您使用的是列表元素作为基本大小写,而没有通过
f
。换句话说,您的“factored”函数对一个元素列表没有任何作用。