【发布时间】:2017-06-29 18:32:33
【问题描述】:
我很难弄清楚 foldr 的功能。我正在做作业,我们应该构建一个函数(不需要 foldr),它压缩两个列表的元素(fe '(1 2 3) (4 5 6) -> (1 4) (2 5) (3 6)。
到目前为止效果还不错:
(define (zip list1 list2)
(cond
[(or (empty? list1) (empty? list2)) '()]
[else (cons (list (car list1) (car list2)) (zip (cdr list1) (cdr list2)))]))
但现在我必须构建一个函数,它使用我之前制作的 zip 函数,将两个列表与一个函数 f 结合起来,并将它们作为一个列表返回。 (fe. (zipfunction + '( 1 2) '(3 4) -> (4 6)
我了解了 foldr 的基本概念,它将递归地将我提供的函数应用到从右到左的列表,但我无法理解如何处理多个列表和多个函数以及如果我需要一个累加器变量或不是。
有人可以帮我吗?
提前谢谢你!
【问题讨论】:
-
(define (zipadd f list1 list2) (map (lambda ..... ....f..... ) (zip list1 list2))),真正使用你的zip函数。