2013-03-10 46 views
0

我做了一個簡單的程序來處理我已經實現的隊列數據結構。這裏是我的代碼Haskell:我的程序沒有轉換

transf :: Queue -> [Char] 
transf emptyQueue = [] 
transf queue = [front queue] ++ transf (dequeue queue) 

其中隊列是

newtype Queue = Q [Char] deriving (Show) 

emptyQueue :: Queue 
emptyQueue = Q [] 

queueIsEmpty :: Queue -> Bool 
queueIsEmpty (Q []) = True 
queueIsEmpty (Q _) = False 

enqueue :: Char -> Queue -> Queue 
enqueue x (Q q) = Q (q ++ [x]) 

dequeue :: Queue -> Queue 
dequeue (Q (_:xs)) = Q xs 
dequeue (Q []) = error "dequeue: empty queue" 

front :: Queue -> Char 
front (Q (x:_)) = x 
front (Q []) = error "front: empty queue" 

我的程序不轉換成隊列字符串。哪裏有問題? 在此先感謝。

+0

另外檢查出這個有趣和優雅的方式,通過使用兩個列表而不是一個來提高運行時性能:http://fateswanderer.wordpress.com/2012/07/22/functional-data-structures-notes/ – firefrorefiddle 2013-03-11 10:53:56

+0

謝謝,它幫助我提高了對數據結構的理解) – 2013-03-11 17:17:54

回答

4
transf emptyQueue = [] 

這裏emptyQueue只是您的參數的名稱。您與全球emptyQueue的內容不匹配。你不能對這樣的變量進行模式匹配 - 僅針對構造函數。

您必須編寫transf (Q [])以匹配空隊列,但請注意,您的整個功能可以簡單地定義爲transf (Q xs) = xs

+0

非常感謝您的建議! – 2013-03-10 17:26:23