我在我的case語句中遇到了(我假設)我正在使用的類型(用於huffman編碼的任務)的類型。我想從樹頂部到每個葉子,並返回一個鍵值對列表。 []傳遞正常,但[h]返回一個解析錯誤,我不知道爲什麼。Haskell:case語句中的解析錯誤(涉及列表!)
type HCode = [Bit]
data Bit = L | R deriving (Eq, Show)
data Tree a = Leaf Int a | Node Int (Tree a) (Tree a) deriving (Eq)
convert :: Ord a => HCode -> Tree a -> [(a,HCode)]
convert hs tree =
case hs tree of
[] (Node _ a b) -> (convert [L] a)++(convert [R] b)
[h] (Node _ a b) -> (convert !([h]++[L]) a)++(convert !([h]++[R]) b)
(h:hs) (Node _ a b) -> (convert !((h:hs)++[L]) a)++(convert !((h:hs)++[R]) b)
[h] (Leaf _ a) -> [(a, [h])]
(h:hs) (Leaf _ a) -> [(a, (h:hs))]
此外,我以前沒有使用過劉海,但我認爲他們在這裏適合?他們會對性能產生影響嗎?我是否在正確的環境中使用它們?
我建議你詢問有關爆炸圖案一個單獨的問題。一個問題 - 每個stackoverflow問題是最好的。總之:不,你沒有正確使用它們。 –
在這裏,劉海對我來說沒有什麼意義,但我可能是錯的。無論哪種方式,我認爲這是一個單獨的問題,而不是你遇到的模式匹配問題。 – amalloy
@ ThomasM.DuBuisson是啊,只是一個小問題,一個是或否是我一直在尋找,所以謝謝 – 420fedoras