Haskell char引用

时间:2014-06-12 09:13:30

标签: haskell char quotes

我最近开始学习haskell,我正在做wikibooks的练习。 我正在使用RLE编码进行练习,我得到了这样的解决方案:

import Data.List
rle :: String -> [(Int,Char)]
rle [] = []
rle xs = zip lengths chars
        where
        groups = group xs
        lengths = map length groups
        chars = map head groups

rle_toString :: [(Int, Char)] -> String
rle_toString [] = []
rle_toString (x:xs) = show (fst x ) ++ show (snd x) ++ rle_toString xs`

不是一个非常优雅的解决方案,但它几乎可以工作。问题是,我输出如下:"7'a'8'b'7'j'6'q'3'i'7'q'1'p'1'a'16'z'2'n'"。带有字符的单引号并不优雅。如何实现输出:"7a8b7j6q3i7q1p1a16z2n"

2 个答案:

答案 0 :(得分:6)

show用于打印Haskell源代码中出现的值,因此在字符周围放置单引号(以及字符串周围的双引号,依此类推)。请改用[snd x]来显示角色。

在Haskell中,String只是Char of Char [Char]的简写。例如,字符串"Foo"也可以这样写:['F','o','o']。因此,要将单个字符转换为字符串,只需将其放入括号中:[char]

答案 1 :(得分:1)

问题是你在角色上使用showshow 'a' == "'a'"

解决方案是要意识到字符串只是字符列表,所以如果c是一个字符,那么包含c的单字符字符串只是[c]