Haskell,如何将ADT转换为String?

时间:2012-10-21 22:19:10

标签: haskell functional-programming

这是我的ADT:

data Tree a = Val Integer
            |Tree a
            |Variable a

我有两个问题:

问题1:使用 Tree String 类型来表示一些树?

问题2:定义一个函数,用于将树,数据类型 Tree String 的元素转换为字符串: showTree :: Tree String - >串

1 个答案:

答案 0 :(得分:5)

关于第二个问题,将树转换为字符串,只需导出Show并使用show函数:

data Tree a = Val Integer
            | Tree a
            | Variable a
    deriving (Eq, Ord, Show)

showTree :: (Show a) => Tree a -> String
showTree = show

我不明白你的第一个问题,所以我只想谈谈我希望我说的话可以帮助你。

了解您的“树”数据类型根本不是树,它只是一个和数据类型,可以通过整数或某种类型与类型变量a匹配来实例化。第二个构造函数Tree实际上并没有使您的数据类型递归 - 它只是一个构造函数名称,方式Variable是构造函数名称。我想你可能想要使用子树(使用Tree作为类型,而不是构造函数) - 所以让我们将你的类型定义为:

data Tree a = Val Integer
            | Branch (Tree a) (Tree a)
            | Variable a

现在你有一个名为Branch的构造函数,它有一个左子树和一个右子树。如果您的变量应该是String s,那么您当然可以使用Tree String来表示:

myTree :: Tree String
myTree =
    let leftBranch = Variable "x"
        rightBranch = Branch (Val 3) (Variable "y")
    in Branch leftBranch rightBranch