2015-04-05 33 views
1
data HuffmanTree 
    = Empty 
    | Intermediate Integer HuffmanTree HuffmanTree 
    | Leaf Char Integer 
    deriving (Show,Eq) 

decode :: HuffmanTree -> [Char] -> [Char] 
decode (Intermediate n x y) (z:zs) = 
    if ..... (some checks for x,y,z)..... 
    then [getChar x] ++ (decode (Intermediate n x y) zs) 

在這個函數中我在移動樹上。在「那麼」部分我採用最深的葉子的x和「++」後,我應該再次給整個輸入樹。問題是:++部分之後仍然我的函數接受我當前的樹(最深的葉的父母)。如何解決它? (我不能改變解碼的類型,因爲它是在作業預定義)如何在使用Haskell中的相同函數後使用同一棵樹遞歸函數

+0

答案幫了很大忙。我想這是唯一的方法(已經嘗試了讓步式結構和其他技巧,但都失敗了) – Tomahawk 2015-04-06 02:31:00

回答

2

你可以通過原樹一起作爲附加參數:

decode' :: HuffmanTree -> HuffmanTree -> [Char] -> [Char] 
decode' (Intermediate originalN originalX originalY) (Intermediate n x y) (z:zs) = 
    if ..... (some checks for x,y,z)..... 
    then [getChar x] ++ (decode' (Intermediate originalN originalX originalY) (Intermediate originalN originalX originalY) zs) 

,讓您有機會獲得整個輸入樹在任何時候。

+0

什麼能阻止你使用多個參數進行解碼? – 2015-04-06 01:46:29

+0

,因爲它是功課和預定義的類型 – Tomahawk 2015-04-06 01:53:04

+0

爲什麼,你確切地說,你刪除了你的第一個評論給我的答案,所以現在我看起來像一個白癡正在對自己說話? – 2015-04-06 01:57:19