我无法以显示树的层次结构的方式打印出以下树数据类型:
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函数跟踪要添加到一个级别的空间来制作它很明显,有一个实际的树结构被打印出来。我知道我对实例定义没有多大帮助,但我真的不知道从哪里开始,因为递归对我来说是一件令人困惑的事情。
答案 0 :(得分:3)
如果你必须使用Show
,那么只需使用一个需要额外arg的内部函数:
instance Show Tree where
show x = show' 0 x
where show' indent x = a ++ show' (indent+1) ++ b -- or something
a = ...
b = ...
但我怀疑你可以用一个额外的参数绘制一个漂亮的树 - 使用ASCII输出打印任意树似乎是一项非常重要的任务。我认为需要更多详细说明。
你可能更好地按照Daniel Wagner的建议重用drawTree,或类似的东西。