Предположим, у меня есть двоичное дерево.Как хорошо печатать глубину рекурсии в Haskell?
main = putStrLn $ printTree tree
data Tree = Empty | Node Int (Tree) (Tree) deriving (Show)
tree = Node 4 (Node 3 Empty (Node 2 Empty Empty)) Empty
printTree :: Tree -> String
printTree x = case x of
Node num treeA treeB -> show num ++ "\n" ++ printTree treeA ++ "\n" ++ printTree treeB
Empty -> "Empty"
Выход
*Main> main
4
3
Empty
2
Empty
Empty
Empty
Желаемая Выход (с помощью табуляции или двойного пространства отлично)
*Main> main
4
3
Empty
2
Empty
Empty
Empty
Начните с возврата '[String]', а не 'String'. Создание вывода списка строк позволяет тривиально изменять каждую строку, возникающую в результате рекурсивного вызова. – Carl