0

如何定义一个函数来将列表反转为仅对 foldr 的一次调用?

它应该看起来像这样

(define (rev l)
    (foldr ___________________________

这是一道练习题,老师决定不回答-.-

4

1 回答 1

1

如果您先阅读文档,那将非常容易。你会发现foldr接收三个参数:

  • 要调用的过程,接收作为参数(按该顺序)从输入列表中处理的当前元素和到目前为止的累积答案
  • 一个初始化值
  • 要处理的列表

现在想一想。如果我们要从头开始构建一个新列表,初始值可能是多少?我们将如何构建列表,可以使用什么程序将元素粘在一起?当然,最后一个参数是输入列表。

唯一棘手的部分是定义过程。鉴于您收到了一个元素和到目前为止累积的答案,您如何将该元素放在累加器的末尾?提示:这是程序的一般结构,请填写缺失的部分:

(lambda (element accumulator) <???>)

额外提示:通过阅读文档,您将了解foldr从左到右处理输入列表。要查看这一点,cons请将其作为第一个参数传递给foldr,您会看到它只是按原样复制输入列表。与此相反foldl,它似乎从右到左处理列表 - 如果您cons作为第一个参数传递foldl给新创建的列表,则将被反转。

于 2012-10-23T16:10:08.260 回答