Scheme - 查找最深入的值嵌套列表

时间:2011-12-05 17:55:00

标签: scheme

几天前我问过有关找到most deeply nested lists的问题。我实现了给出的想法,并且它有效。

但还有另一个问题:我还需要从嵌套列表中构建一个列表。意思是:如果我将(8)(10 11 12)更改为leaf1和leaf2,我需要返回:'(ans (leaf1 (8)) (leaf2 (10 11 12))。 / ans是一个引用

换句话说: 我的功能会得到 (1 (2 3) (4 (5) (7 (8) (10 11 12)))))) =>最嵌套的列表是(8)(10 11 12) =>我的函数将返回'(ans (leaf1 (8)) (leaf2 (10 11 12))

我想找个主意,不是实现。感谢。

1 个答案:

答案 0 :(得分:1)

是的,这很容易做到。目前(如果我理解正确的话)你有一个递归函数,它下降一棵树并使用cons来构建一个修改后的副本(其中最深层嵌套的列表被替换为某些东西)。这是树递归函数的常见模式,但没有理由他们必须返回与它们重复出现的输入具有相似结构的值。例如,您可以编写一个函数来遍历数字树并返回它们的总和。

在这种情况下,您可能希望保留树递归函数的基本结构,但使用cons或可能append来构建 flat 列表你找到的最深层次的嵌套列表。

我无法从你的问题中说出来,但你也可能正在寻找一种方法来编写一个返回两个单独值的函数:一个是更换了深层嵌套列表的树通过其他东西,另一个是替换位本身的平面列表。在这种情况下,您可能希望查看Scheme过程valuescall-with-values,如果您的Scheme拥有它,则可能需要let-values库。有关详细信息,请参阅Schemewiki常见问题here(向下滚动)。