到目前为止,我有99.hs文件:
import Data.List
myEncode :: Eq a => [a] -> [(Int, a)]
myEncode = map (\x -> (length x, head x)) . group
但是当我试图在 ghci 中使用它时,我得到了这个(虽然我尝试过但还没有找到解释):
*Main> myEncode "///aaaaabbbbbbbccdddddxxyyzz0"
[(3,'/'),(5,'a'),(7,'b'),(2,'c'),(5,'d'),(2,'x'),(2,'y'),(2,'z'),(1,'0')] │
*Main> myEncode "\\\aaaaabbbbbbbccdddddxxyyzz0"
[(1,'\\'),(1,'\a'),(4,'a'),(7,'b'),(2,'c'),(5,'d'),(2,'x'),(2,'y'),(2,'z'),(1,'0')]
关于此问题的详尽来源(当然,关于haskell)的任何链接都会很好,也是对这个问题的一个很好的解释。
答案 0 :(得分:7)
在普通键盘上很难输入的字符有很多转义码,或者会让Haskell在编辑器中读取很烦人。因此,例如,制表符在Haskell代码中表示为'\t'
,换行符由'\n'
表示,依此类推。为了表示一个字面反斜杠,一个人逃避它,因此'\\'
;而且'\a'
恰好也是一个逃避角色(对于钟控制角色来说,这是一个文明年龄较低的残余部分)。
因此字符串"\\\a"
表示一个双字符列表,其第一个元素中包含反斜杠字符,第二个元素中包含铃声控制字符。
the Report中给出了字符和字符串文字语法的完整描述。