我真的很困惑如何做到这一点......我什至不知道如何开始,我知道如何做一个二叉树,但我希望能够用任何形式的嵌套列表来做到这一点,任何人都可以帮助我吗?返回嵌套列表的嵌套深度n上的所有元素
回答
对于这一个,你需要使用模板遍历任意嵌套的元素列表。例如,研究这个复制任意嵌套列表的程序:
(define (copy lst)
(cond ((null? lst) ; if list is empty
'()) ; return the empty list
((not (list? (car lst))) ; if current element is not a list
(cons (car lst) ; cons current element
(copy (cdr lst)))) ; with the rest of the list
(else ; if current element is a list
(cons (copy (car lst)) ; cons recursive call over current element
(copy (cdr lst)))))) ; with recursive call over rest of the list
先有一点约定。假设1
是基本级别,并且返回的所有元素都将位于平面输出列表中(不保留输入列表的原始结构)。例如:
(elements-level '(1 2 3) 1)
; => '(1 2 3)
(elements-level '(1 (2) 3) 2)
; => '(2)
考虑到上面的模板,让我们看看如何修改它解决手头的问题。我会让你填写的空白,因为这个问题看起来像功课:
(define (elements-level lst lvl)
(cond ((or (null? lst) (< lvl 1)) ; if list is empty or below level
'()) ; return the empty list
((not (list? (car lst))) ; if current element is not a list
(if (= lvl <???>) ; if `lvl` is the base level
(cons <???> ; cons current element in list
(elements-level <???> lvl)) ; and advance recursion over cdr part
(elements-level <???> lvl))) ; else advance recursion over cdr part
(else ; if current element is a list
(append ; use `append` for flattening the list
(elements-level <???> <???>) ; recur over car, decrease one level
(elements-level <???> <???>))))) ; recur over cdr, keep the same level
测试与此列表中的程序,它必须为1
水平,'(2)
回到'(1)
为2
水平,等等:
(elements-level '(1 (2 (3 (4 (5))))) 1)
; => '(1)
我认为你可以使用递归与步骤如下:
- 定义列表,以保持在第n个深度的所有元素。
- 创建一个递归函数,该函数
nested list
,new list
和n
作为参数 - 对于嵌套循环中的每个元素,通过使子列表和深度为n-1个调用递归函数本身。
- 的
nested list
的所有元素添加到new list
当n = 0
一旦这个方法执行完毕后,你会在new list
深度n
的所有元素。
可能增强: 如果有可能的一些列表中的元素不会延伸至第n级,那么你可能想调用递归方法之前检查元素的类型。如果它是leaf类型的,那么只需将该元素添加到新列表中。
由于FR的评论,但我真的不明白如何代码你说什么,这是我会做的,但我确定它不会工作(定义(rec nestedlst newlst n) (if(= n 0) nestedlst (cond((null? nestedlst) ((atom_ nestedlst)nestedlst) (else(append(rec(car nestedlst)newlst( - n 1)) (rec(cdr nestedlst)newlst( - n 1))))))) – Daquicker
@Daquicker:哪一部分你没有得到,哪一个你认为不行? –
- 1. 用于深度嵌套元素的XPath?
- 2. 列表/元组内嵌套元素的深度问题
- 3. 所有嵌套的后代深度嵌套
- 4. CSS选择多达N层深度的嵌套元素
- 5. 多元素嵌套列表
- 6. 访问嵌套列表元素,运行时已知深度
- 7. 嵌套元素的返回索引
- 8. 嵌套集合的深度
- 9. 嵌套列表到数据框并返回到嵌套列表
- 10. 选择深嵌套元素的.index()
- 11. 返回嵌套级别和值的嵌套列表
- 12. JPA嵌套的嵌套集合元素
- 13. 转换嵌套列表嵌套元组
- 14. Meteor.js +的MongoDB ::从深度嵌套阵列
- 15. MongoDB的更新深度嵌套阵列
- 16. 嵌套元素
- 17. 筛选嵌套对象以返回所有子元素
- 18. Python 3.4.1 - 嵌套列表中的元素
- 19. 的Python - 追加元素嵌套列表
- 20. 更新嵌套列表中第n个元素的第n个元素
- 21. LINQ的嵌套表3深
- 22. 嵌套元素宽度为列宽
- 23. Thymeleaf嵌套列表/ ArrayList - 获取所有元素的总大小
- 24. 如何乘以一个嵌套列表的所有元素
- 25. 访问嵌套列表的所有元素
- 26. AngularJS嵌套指令深度
- 27. AngularJS从深度嵌套JSONP
- 28. 找到所有嵌套img元素
- 29. 骨干嵌套:渲染嵌套元素
- 30. Angular2 - 嵌套表单元素
我希望它像一个列表工作: (1(2(3 4)5 6 7(8(5 6)9))) – Daquicker