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