zal*_*rak 4 lisp tree scheme reverse data-structures
我对Scheme中的基本树数据结构有一个深度反转
(define (deep-reverse t)
(cond ((null? t) '())
((not (pair? t)) t)
(else (cons (deep-reverse (cdr t)) (deep-reverse (car t))))))
(define stree (cons (list 1 2) (list 3 4)))
1 ]=> (deep-reverse stree)
;Value: (((() . 4) . 3) (() . 2) . 1)
Run Code Online (Sandbox Code Playgroud)
我觉得更清洁,更好的结果是:
(4 3 (2 1))
Run Code Online (Sandbox Code Playgroud)
任何人都可以提供一些关于我在深度反转功能中出错的指导吗?谢谢.
最好将任务分成简单的操作,而不是一次性完成所有操作.您想要实现的目标可以这样描述:反转当前列表本身,然后深度反转其中的所有子列表(或者反过来,这两个步骤的顺序并不重要.我选择此顺序,因为它导致更好的源代码格式化).
现在,标准库中已经有一个函数用于简单地反转列表reverse
.所以你需要做的就是将它与那些作为子列表的元素的递归结合起来:
(define (deep-reverse t)
(map (lambda (x)
(if (list? x)
(deep-reverse x)
x))
(reverse t)))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1380 次 |
最近记录: |