【问题标题】:Rewriting trees重写树
【发布时间】:2013-05-05 12:35:39
【问题描述】:

我有一个表示类型签名的数据结构,这个数据结构是一棵树,在第一张图片中以红色为例。我想要黑色的,到目前为止我只有橙色的(第二张图片),它是类型树,但与左侧相关联。

这是我目前得到的橘子树(跟随橙色箭头)

我已经通过漂亮地打印树然后用解析器组合器解析它来解决这个问题,但是这种低效率是不希望的。我想我可以有另一种算法来从橙色树转换为黑色树,但如果不是组合两个算法,我可以只写一个会更好。

当我在上面写我的解决方案时,我会将它标记为 Haskell。我可以提供代码来获得像红树这样的数据结构,但我认为这只会使解决方案的尝试复杂化..

我想知道这个算法是否有名称和/或红树中操作员位置的名称是什么。是前缀吗?

谢谢。

【问题讨论】:

  • 您拥有的是(a -> b) -> c。你得到的是(a -> b) -> c。你想要的是a -> (b -> c)。我认为您在决定想要什么结果时犯了一个错误。
  • @DanielFischer 确实,我现在决定在堆栈的帮助下获得我想要的结果,感谢您阅读我的烂摊子

标签: haskell tree binary-tree computer-science


【解决方案1】:

查看递归方案。这里有一个相关问题,其中包含大量链接:

Recursion schemes for dummies?

关于该问题的所有链接都非常好,但我会特别查看 Tim Williams 的幻灯片(我对该问题的回答中的链接),了解各种不同递归模式的具体实现(其中大部分是演示的)在树结构上)。

【讨论】:

    猜你喜欢
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    相关资源
    最近更新 更多