在Haskell中创建任意嵌套的列表结构

时间:2013-06-15 10:36:18

标签: haskell

考虑到以下问题:

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中执行此操作?

1 个答案:

答案 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]]