Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 重写树_Haskell_Tree_Binary Tree_Computer Science - Fatal编程技术网

Haskell 重写树

Haskell 重写树,haskell,tree,binary-tree,computer-science,Haskell,Tree,Binary Tree,Computer Science,我有一个表示类型签名的数据结构,这个数据结构是一棵树,在第一张图片中以红色为例。我想得到黑色的,到目前为止,我只得到了橙色的(第二张图片),这是类型树,但相关的左侧 这是我到目前为止得到的橙色树(按照橙色箭头) 我已经解决了这个问题,非常漂亮地打印了树,然后用解析器组合器对其进行解析,但是这种低效率是不可取的。我想我可以有另一个算法来将橙色的树转换成黑色的树,但是如果我不编写两个算法,而是只编写一个,那就更好了 当我在上面写我的解决方案时,我将把它标记为Haskell。我可以提供代码来获得类

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

这是我到目前为止得到的橙色树(按照橙色箭头)

我已经解决了这个问题,非常漂亮地打印了树,然后用解析器组合器对其进行解析,但是这种低效率是不可取的。我想我可以有另一个算法来将橙色的树转换成黑色的树,但是如果我不编写两个算法,而是只编写一个,那就更好了

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

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


谢谢。

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


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

您拥有的是
(a->b)->c
。你得到的是
(a->b)->c
。你想要的是
a->(b->c)
。我认为你在决定你想要什么结果时犯了一个错误。@DanielFischer事实上,我现在决定在stacks Three的帮助下得到我想要的结果,谢谢你通读我的文章