2014-10-11 48 views
0

試圖解決需要使用zip的問題,範圍&級聯以創建一個十六進制映射列表,如[(0,0),(1,1),(2,2), (3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10, 'A'), (11,'B'),(12,'C'),(13,'D'),(14,'E'),(15,'F')]Haskell使用zip範圍和級聯

我一直在嘗試像zip [0..9] [0..9] ++ zip [10..15] ['A'..'F']

zip [[0..9] [0..9] ++ [10..15] ['A'..'F']]

我理解那些組列表的郵編將放在一起的映射表,我需要,但我只是不能似乎讓他們一起和++符號是我們也引入了concoudaion的唯一方法。任何幫助都會很棒。

回答

3

確保您的類型匹配

zip [0..9] ['0'..'9'] ++ zip [10..15] ['A'..'F'] 

要看到這是爲什麼,讓我們在ghci中發揮:

Prelude> :t zip [0..9] [0..9] 
zip [0..9] [0..9] :: (Num b, Num a, Enum b, Enum a) => [(a, b)] 

Prelude> :t zip [10..15] ['A'..'F'] 
zip [10..15] ['A'..'F'] :: (Num a, Enum a) => [(a, Char)] 

,你可以在你的第二個部分看你拉上一些數字,字符,但第一個 壓縮數字和數字。現在GHC不知道如何從數量-文字 一個Char09,甚至試圖告訴你這一點:

Prelude> zip [0..9] [0..9] ++ zip [10..15] ['A'..'F'] 

<interactive>:9:13: 
    Could not deduce (Num Char) arising from the literal ‘0’ 
    ... 

這就是爲什麼你需要做這樣的第一部分太:

Prelude> :t zip [0..9] ['0'..'9'] 
zip [0..9] ['0'..'9'] :: (Num a, Enum a) => [(a, Char)] 
+0

非常感謝!在過去的幾個小時裏,我一直非常沮喪地工作:)我想我沒有意識到我可以做['0'...'9']或者說這有什麼不同,再次感謝! – Abstract3000 2014-10-11 08:47:35

+2

沒問題:小提示:如果您仔細地發佈/閱讀錯誤,您會早得多;) – Carsten 2014-10-11 08:49:39