【发布时间】:2011-12-08 06:24:26
【问题描述】:
假设我有清单:(a b ((c)) (d + e) ((e + f)) (g) () h)
如何获取以下列表(最好带函数):(a b c (d + e) (e + f) g h)
换句话说:
如果嵌套列表只有一个元素,则将其简化为该元素。在上面的例子中,
((c))被简化为 c。((e + f))也变为(e + f)。如果嵌套列表有多个元素,则它保持不变。在上面的例子中,
(d + e)仍然是(d + e)。如果嵌套列表为空,则直接将其移除。
最后 我不确定扁平化一词是否适用于这种情况。 我希望我的问题很清楚。如果没有,请告诉我。
提前致谢!
【问题讨论】:
-
我不确定你的例子是否正确。例如,根据您的定义,列表
((d+e) (g))将被展平为(d+e g)。我的观点是,d+e算作一个 single 元素;如果列表是((d e) (g))会有所不同,在这种情况下,扁平列表将是((d e) g) -
@ÓscarLópez,是的,示例 (a b c (d+e) (e+f) g h) 是我想要的结果。所以如果我有列表 ((d e) (g)) 我想得到 ((d e) g)。
-
对,但我的问题是列表
((d+e) g)会发生什么,因为(d+e)部分只是一个单元素列表。在方案d+e是一个单个符号,如果你想把它解释为三个符号,你必须在它们之间放置空格,像这样(d + e) -
@ÓscarLópez 对不起,我想我没有说清楚。 (d+e) 是一个 3 元素列表。所以我猜 (d + e) 会更合适。我将编辑我的上述描述以显示这一点。所以 ((d + e) g) 仍然是 ((d + e) g)。
标签: list recursion scheme nested-lists flatten