我在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)
?
答案 0 :(得分:1)
一些评论:
if
最好写成cond
个表达式。 您可以生成一个接受列表并执行过滤和添加的闭包,但最简单的方法是首先过滤列表,然后对结果元素求和:
(foldl + 0 (filter even? '(1 2 3 4 5)))
=> 6