List 使用foldr反转列表

List 使用foldr反转列表,list,scheme,fold,List,Scheme,Fold,如何定义一个函数,将列表反转为仅对foldr的一次调用 应该是这样的 (define (rev l) (foldr ___________________________ 这是一道练习题,老师决定不回答-。-如果你读第一道题,那就太容易了。您将发现foldr接收三个参数: 要调用的过程将从输入列表中接收当前正在处理的元素和到目前为止累积的答案作为参数(按该顺序) 初始化值 要处理的列表 现在想一想。如果我们要从头开始建立一个新的列表,初始值是多少?我们将如何构建列表,可以使用什么程

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

应该是这样的

(define (rev l)
    (foldr ___________________________

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

如果你读第一道题,那就太容易了。您将发现
foldr
接收三个参数:

  • 要调用的过程将从输入列表中接收当前正在处理的元素和到目前为止累积的答案作为参数(按该顺序)
  • 初始化值
  • 要处理的列表
现在想一想。如果我们要从头开始建立一个新的列表,初始值是多少?我们将如何构建列表,可以使用什么程序将元素粘在一起?当然,最后一个参数是输入列表

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

(lambda (element accumulator) <???>)
(lambda(元素累加器))

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

我想您将左右混淆了。使用
foldl
实现反向是很简单的,但是使用
foldr
,它不是。@ChrisJester-Young不,它不是混合的。这就是OP练习的全部内容——做作且效率低下,但使用正确的列表程序并没有那么困难。我们希望您尝试自己解决这个问题,而不是要求社区为您找到一个完整的解决方案。当您有一些代码向我们展示您的一些努力时(即使是错误的),请更新您的问题和标志以重新打开。谢谢。这位老师不会碰巧是安娜·米拉诺娃吧?