【发布时间】:2017-03-06 03:51:41
【问题描述】:
刚开始学习scheme,觉得cons-cdr部分有点难懂。我正在制作一个函数,它接受一个列表,然后显示该列表中的所有原子,包括子列表中的所有原子,就好像它是一个大列表一样。它看起来像这样: (展平'(1 (2 3) 4 5 (6 7)))
(1 2 3 4 5 6 7)
这是我的代码:
(define (flatten list1)
(if (not (empty? list1))
(if (atom? (car list1))
(cons (car list1)(flatten (cdr list1)))
(begin
(flatten (car list1))
(flatten (cdr list1))))
'()))
但是,这样做时,它会删除子列表。所以 (flatten '((1 2) 3 4) 会给出 (3 4) 而不是 (1 2 3 4)。
有什么帮助吗?问题可能出在“(开始”)部分,但我无法弄清楚..
谢谢!
【问题讨论】:
-
这是一个家庭作业,还是你只是想自己理解?我的提示(如果这是家庭作业)是您提供的整个列表正在处理中,但您永远不会在
begin部分中组合这两个函数的输出。这意味着实际上只有(flatten (cdr list1))被返回。 -
另外,您是否需要能够任意深入列表,或者深度为 1 就足够了?我的意思是应该
((1 2) 3 ((4 5) 6))处理到(1 2 3 (4 5) 6)或(1 2 3 4 5 6)?
标签: list scheme flatten cons cdr