如何定义一个函数来将列表反转为仅对 foldr 的一次调用?
它应该看起来像这样
(define (rev l)
(foldr ___________________________
这是一道练习题,老师决定不回答-.-
如果您先阅读文档,那将非常容易。你会发现foldr
接收三个参数:
现在想一想。如果我们要从头开始构建一个新列表,初始值可能是多少?我们将如何构建列表,可以使用什么程序将元素粘在一起?当然,最后一个参数是输入列表。
唯一棘手的部分是定义过程。鉴于您收到了一个元素和到目前为止累积的答案,您如何将该元素放在累加器的末尾?提示:这是程序的一般结构,请填写缺失的部分:
(lambda (element accumulator) <???>)
额外提示:通过阅读文档,您将了解foldr
从左到右处理输入列表。要查看这一点,cons
请将其作为第一个参数传递给foldr
,您会看到它只是按原样复制输入列表。与此相反foldl
,它似乎从右到左处理列表 - 如果您cons
作为第一个参数传递foldl
给新创建的列表,则将被反转。