2015-11-21 144 views
2

因爲我是Haskell的新手,我對一切都不是很熟悉。我試圖使用模式匹配實現一個函數,但是這不會工作,因爲它給出了以下例外:Prelude.head空列表。這是代碼示例:模式匹配Haskell中的空列表

swapListToTowers::[[Bool]]->[[Bool]] 
swapListToTowers [] = [] 
swapListToTowers xs = [head x| x <-xs]:swapListToTowers (cutOfFirstElements xs) 


cutOfFirstElements::[[Bool]]->[[Bool]] 
cutOfFirstElements [] = [] 
cutOfFirstElements xs = [tail x | x <- xs] 

我想捕捉空表的情況下不能做相當的工作,不是嗎? 在此先感謝您的幫助!

+2

你的函數的目標是什麼?你想做什麼? – ponkin

回答

1

我想你錯過了一個模式來匹配您的內部列表,所以,當你到你的列表理解,還沒有一個檢查,看看你的內心列表爲空

我不是確定你的功能是用來做什麼的,但是你可能想把功能拆分成這樣,這樣你就可以處理它自己的空子列表了。

swapListToTowers::[[Bool]]->[[Bool]] 
swapListToTowers [] = [] 
swapListToTowers xs = swapListToTowersInner (head xs) : ... 

swapListToTowersInner :: [Bool] -> [Bool] 
swapListToTowersInner [] = [] 
swapListToTowersInner xs = head xs 

... similarly here for cutOfFirstElements 
2

這兩個函數都將參數列表作爲參數列表。空列表匹配[]只與外部列表匹配,但不是外部列表非空,但內部列表不是;例如[[]]