尝试解决需要使用拉链,范围和范围的问题。连接以创建十六进制映射列表,如[(0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6) ),(7,7),(8,8),(9,9),(10,' A&#39),(11,' B&#39),(12,& #39; C&#39),(13,' d&#39),(14,' E&#39),(15,' F&#39)]
我一直在尝试像zip [0..9] [0..9] ++ zip [10..15] ['A'..'F']
或zip [[0..9] [0..9] ++ [10..15] ['A'..'F']]
我理解这些组列表的Zip会将我需要的映射列表放在一起,但我似乎无法将它们组合在一起,++ Sign是我们引入的唯一的concatentaion方法。任何帮助都会很棒。
答案 0 :(得分: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不知道如何从数字文字中创建Char
比如0
和9
,甚至试图告诉你:
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)]