【问题标题】:Converting between tree types (Haskell)树类型之间的转换(Haskell)
【发布时间】:2014-09-18 09:01:18
【问题描述】:

晚安,

对于学校作业,我必须编写一个非常简单的程序;我需要将树从一种类型转换为另一种类型。但我很难过,因为我无法参加讲座,因此不知道我的代码有什么问题。任务是将 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 tree) 时没有任何反应,它只是永远运行(showTree 是在老师给出的某个库中为 RoseTree 定义的打印函数)。

【问题讨论】:

  • 您的错误一定在其他地方。给出的测试树不应导致无限递归(任何其他有限树也不应)。

标签: haskell tree type-conversion


【解决方案1】:

错误不在代码中;错误在于我无法准确识别 showTree 函数的作用,它没有打印到控制台(如我所料)。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 嗯,看来它毕竟奏效了。我认为出现问题的原因是因为控制台窗口中没有发生任何事情,但它所做的(虽然我还不知道如何)是通过一些脚本以图形方式在 html 文件中显示数据。感谢您的快速评论和测试!
    • @user3316806:如果您自己解决了问题,请添加答案。
    猜你喜欢
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 2010-12-29
    • 2011-08-18
    • 2012-11-02
    • 1970-01-01
    相关资源
    最近更新 更多