考虑到以下问题:
http://arunrocks.com/treeify_-_converting_tree_data_structures/
对于业余爱好项目,我遇到了一个将树的平面表示转换为嵌套数据结构的有趣问题。树的平面表示如下所示:
0 0 1 1 2 3 2 1
每个数字指的是树中的嵌套级别。转换为嵌套结构后,它应如下所示(方括号是列表的Python语法):
[0, 0, [1, 1, [2, [3], 2], 1]]
我如何在Haskell中执行此操作?
答案 0 :(得分:13)
在Haskell中,列表的所有元素都需要具有相同的类型。所以你不能有一个列表,其中一个元素是一个整数,另一个元素是一个列表。因此[1, [2, 3]]
会导致Haskell中出现类型错误。
因此,如果您想表示这样的任意嵌套结构,您需要为此定义自己的类型。这看起来像这样:
data Tree a =
Leaf a
| Branch [Tree a]
该类型的值可能如下所示:
Branch [
Leaf 0, Leaf 0,
Branch [
Leaf 1, Leaf 1, Branch [
Leaf 2, Branch [
Leaf 3],
Leaf 2],
Leaf 1]]