簡體   English   中英

Haskell:case語句中的Parse錯誤(涉及列表!)

[英]Haskell: Parse error in case statement (involving lists!)

在我的case語句中,我遇到了(我假設)我正在使用的類型(對於霍夫曼編碼的賦值)。 我想從樹的頂部到每個葉子工作,並返回一個鍵值對列表。 []傳遞正常,但[h]返回一個解析錯誤,我不知道為什么。

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))]

我之前沒有用過劉海,但我覺得它們在這里合適嗎? 它們會對性能產生影響嗎? 我是否在正確的背景下使用它們?

case ab of ...ab都不匹配,而是匹配調用a作為函數的結果,參數為b case表達式總是與一個值匹配,甚至第一個子句(您認為有效)也絕對不起作用。

要匹配兩個值,將它們包裝在一個元組中,然后在每個子句中拆分元組,如下所示:

case (hs, tree) of
  ([], (Node _ a b)) -> ...
  ([h], (Node _ a b)) -> ...
  ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM