在树类型之间转换(Haskell)

时间:2014-09-18 09:01:19

标签: haskell tree type-conversion

Goodday,

对于学校作业,我必须写一个非常简单的程序;我需要将树从一种类型转换为另一种类型。但是我很难过,因为我无法参加讲座,因此不知道我的代码有什么问题。赋值是将树从Tree1a类型转换为RoseTree:

data RoseTree = RoseNode String [RoseTree]
data Tree1a = Leaf1a Number | Node1a Number Tree1a Tree1a

tree = Node1a 1 (Leaf1a 2)
                (Node1a 3 (Leaf1a 4)
                          (Leaf1a 5))

pp1a :: Tree1a -> RoseTree
pp1a (Leaf1a n)            = RoseNode (show n) []
pp1a (Node1a n left right) = RoseNode (show n) [pp1a left, pp1a right]

(数字是在教师提供的图书馆中定义的,但这不是问题所在。)但这不起作用;当我运行showTree(pp1a树)时没有任何反应,它只是永远运行(showTree是一个在老师给出的某个库中为RoseTree定义的打印函数)。

2 个答案:

答案 0 :(得分:1)

错误不在代码中;错误在于我没有完全认识到showTree函数的作用,它没有打印到控制台(正如我所料)。

答案 1 :(得分:0)

我在deriving Show类型签名中添加了RoseTree,这对我有用。

*Main> pp1a tree
RoseNode "1" [RoseNode "2" [],RoseNode "3" [RoseNode "4" [],RoseNode "5" []]]

虽然我确实将Number更改为Int,但我看不出这有什么不同!