foldr - 添加两个列表的压缩元素

时间:2017-06-29 18:32:34

标签: list lambda scheme fold

我很难弄清楚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的基本思想,它将递归地应用我从右到左提供给列表的函数,但是我无法使用几个列表和几个函数来完成它,如果我需要一个累加器变量或者不

有人可以帮我吗?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

更自然的答案是使用map

(map + '(1 2) '(3 4))

当然,可以使用map表示foldr

(foldr (lambda (x y acc)
         (cons (+ x y) acc))
       '()
       '(1 2)
       '(3 4))

使用foldr时应该记住的是它使用一个或多个列表作为输入,并且每个元素都作为参数传递给过程,并且在该过程中,累积的结果也作为输入传递具有指定初始值的参数(在这种情况下为空列表);由您来决定如何在过程中组合/累积参数以产生结果。