如何使用过滤器调用我的功能工厂?

时间:2015-11-10 09:59:32

标签: functional-programming scheme racket

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

(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。

如何在实施过滤器(even? x)

时调用函数工厂

1 个答案:

答案 0 :(得分:1)

一些评论:

  • 嵌套if最好写成cond个表达式。
  • 看起来您正在实施fold功能。

您可以生成一个接受列表并执行过滤和添加的闭包,但最简单的方法是首先过滤列表,然后对结果元素求和:

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