我很难弄清楚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的基本思想,它将递归地应用我从右到左提供给列表的函数,但是我无法使用几个列表和几个函数来完成它,如果我需要一个累加器变量或者不
有人可以帮我吗?
提前谢谢!
答案 0 :(得分:0)
更自然的答案是使用map
:
(map + '(1 2) '(3 4))
当然,可以使用map
表示foldr
:
(foldr (lambda (x y acc)
(cons (+ x y) acc))
'()
'(1 2)
'(3 4))
使用foldr
时应该记住的是它使用一个或多个列表作为输入,并且每个元素都作为参数传递给过程,并且在该过程中,累积的结果也作为输入传递具有指定初始值的参数(在这种情况下为空列表);由您来决定如何在过程中组合/累积参数以产生结果。