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)))
)
)
说明:
规则:
- 如果列表为空,则反向列表也为空
- 否则在列表的反向尾部后面,添加列表的第一个元素
这样看这段代码:
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/