2013-12-08 52 views
-1
實例

我已經在Haskell數據隊列寫入隊列數據類型= .....哈斯克爾隊列爲顯示

而現在我們已經被要求定義一個函數showQueue作爲輔助函數聲明我的數據隊列作爲Show的一個實例(前奏)

真的不知道該怎麼做。

任何人都可以幫助我嗎?

感謝您的期待! PS:如有必要,我可以發佈我的數據隊列代碼。

該處是我的代碼:

 data Queue a = Q [a] 
         deriving Show 

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

     enqueue :: (Ord a) => a -> Queue a -> Queue a 
     enqueue x (Q xs) = Q (xs++[x]) 
+0

數據隊列的郵政編碼。 – Sibi

+0

Hello,done .... – Blnpwr

+0

你是打算以特定的方式格式化輸出嗎?你的'Queue'類型已經在派生'Show'了,那麼你是否想要移除它並創建一個顯式實例? – Lee

回答

3

假設您需要編寫自己的Show實例而不是使用deriving。您可能需要顯示隊列中的每個元素。在這種情況下,元素類型a需要是Show的實例,然後可以以某種方式將顯示的值組合在一起,例如,

instance Show a => Show (Queue a) where 
    show (Q l) = "Queue " ++ show l 
+0

非常感謝... – Blnpwr

1

這可以是解決這個問題的方法之一:

data Queue a = Q [a] 

instance Show a => Show (Queue a) where 
    show = showQueue 

showQueue :: Show a => Queue a -> String 
showQueue (Q xs) = concat $ intersperse "," $ map show xs 

showQueue是一個函數展示示例輸出。您可以通過更改該函數的定義以任何方式顯示自定義輸出。

或者,這會容易得多:

showQueue :: Show a => Queue a -> String 
showQueue (Q xs) = show xs 

也不要使用deriving,如果你要創建它的實例。否則會引發編譯錯誤。

+0

非常感謝!但是,在這種情況下,concat $ intersperse意味着什麼? – Blnpwr

+0

'intersperse'將放置在列表和'concat'之間的「,」將它們連接到'String' – Sibi

+0

非常感謝。 – Blnpwr