recursion - 如何反转列表?

标签 recursion scheme reverse

Scheme中反转列表的函数是什么?

它需要能够处理嵌套列表。因此,如果您执行类似 (reverse '(a (b c d) e)) 的操作,您将得到 (e (b c d) a) 作为输出。

我应该如何解决这个问题?我不仅仅是在寻找答案,而是在寻找能帮助我学习的东西。

最佳答案

用途:

(define (reverse1 l)
  (if (null? l)
     nil
     (append (reverse1 (cdr l)) (list (car l)))
  )
)

说明:

规则:

  1. 如果列表为空,则反向列表也为空
  2. 否则在列表的反向尾部后面,添加列表的第一个元素

这样看这段代码:

reverse1 是函数名称,l 是参数。如果列表为空,则相反的列表也为空。 否则,使用列表尾部的 (cdr l) 调用 reverse1 函数,并将其附加到您作为列表创建的第一个元素 (car l)。

在您的示例中(伪代码):

1st iteration
l=>(a (bcd)e)
car l => a
cdr l => (bcd)e
list(car l) =>(a)
------------------
reverse( cdr l)"+"(a)
------------------
2nd iteration
l=>((bcd)e)
car l => (bcd)
cdr l =>e
list(car l)=>(bcd)
--------------------
reverse(cdr l)"+"((bcd))+(a)
-----------------------
3rd iteration
l=>e
car l=> e
cdr l => nil
list (car l) =>(e)
-------------------------
(e (bcd)a)

关于recursion - 如何反转列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4092113/

相关文章:

python - 使用递归的嵌套列表的最高值和最低值

scheme - SICP 练习 3.52 : Is memo-proc necessary using Scheme (Guile)?

java - 从树中的聚类对象逐步绘制树状图的算法

javascript - 指定属性返回它的js递归函数

python - 通过矩阵查找所有路径

lambda - lambda 表达式中的 Racket 和未绑定(bind)标识符,与 r5rs 对比

lambda - 使用任意数量参数的过程的目的/用途?

python - Python 中是反射增广加法 (__iadd__) 吗?

c# - 在 C# 中反转单链表

python - networkx 反向函数的开销?