Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.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中生成Show的树数据类型实例_Haskell_Tree - Fatal编程技术网

在Haskell中生成Show的树数据类型实例

在Haskell中生成Show的树数据类型实例,haskell,tree,Haskell,Tree,我无法以显示树层次结构的方式打印以下树数据类型: data Tree a b = Branch b (Tree a b) (Tree a b) | Leaf a instance (Show a, Show b) => Show (Tree a b) where show t = 我可以让树按照从上到下的正确顺序打印出它的节点,但我不知道如何让show函数跟踪要添加到某个级别的空间数量,从而清楚地表明正在打印实际的树结构。我知道我并没有给

我无法以显示树层次结构的方式打印以下树数据类型:

data Tree a b = Branch b (Tree a b) (Tree a b)
              | Leaf a

instance (Show a, Show b) => Show (Tree a b) where
         show t = 

我可以让树按照从上到下的正确顺序打印出它的节点,但我不知道如何让show函数跟踪要添加到某个级别的空间数量,从而清楚地表明正在打印实际的树结构。我知道我并没有给我的实例定义太多的东西,但我真的不知道从哪里开始,因为递归现在对我来说是一件令人困惑的事情。

如果你必须为此使用
Show
,那么只需使用一个带额外参数的内部函数:

实例显示树,其中
显示x=显示“0 x”
其中show'indent x=a++show'(indent+1)++b--或其他什么
a=。。。
b=。。。
但我怀疑你能用一个额外的参数画出一棵漂亮的树——用ASCII输出打印任意的树似乎不是一件简单的任务。我认为这需要更多的阐述


按照Daniel Wagner的建议或类似建议,您可能会更好地重复使用。

一般来说,您不应该这样做<代码>显示实际上是用于打印出您可以复制并粘贴到源代码中的内容。您可能应该为此编写一个独立的函数,或者使用一个漂亮的打印库。是的,递归令人困惑,也许使用fold可以减少困惑。您可能想仔细阅读的来源,虽然它不是注释的方式,我希望在这里得到一个答案。