考慮顯示樹哈斯克爾
data Tree a b = Branch b (Tree a b) (Tree a b) | Leaf a
我試圖定義顯示的一個實例(沒有導入任何模塊或使用派生),這將顯示樹形像這樣
Main*> let a = Branch "x" (Branch "y" (Leaf 4) (Leaf 7)) (Leaf 9)
Main*> a
"x"
"y"
4
7
9
以下數據類型
到目前爲止,這是我想出的
findDepth (Leaf a) = 0
findDepth (Branch a (b) (c)) = 1 + (max (findDepth b) (findDepth c))
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 (Leaf x) = show x
show (Branch a (b) (c)) =
show a ++ "\n" ++ s2 ++ show b ++ "\n" ++ s2 ++ show C++ "\n" ++ s1
where
d = findDepth (Branch a (b) (c))
s1 = addSpace (d-1)
s2 = addSpace d
addSpace n = replicate n '\t'
不幸的是,這使得節點h最深,最深的節點最少。我知道findDepth函數實際上應該給葉子最大的價值和分支最低價值,但不能找出一種方法來遞歸地爲這兩個參數編寫函數。有什麼建議麼?
如果您不認爲這是其他問題的重複,請隨時添加註釋(不要忘記添加'@ Zeta')。這就是說,你仍然可以接受一個已發佈的答案。順便說一句,目前是否有某種Haskell講座?一些最新的問題非常相似。 – Zeta