Haskell中如何将字符转为无引号字符串并生成对应列表?
解决Haskell中字符转无引号字符串的问题
嗨,我来帮你搞定这个小问题~你遇到的情况是因为show函数对于Char类型的默认输出就是带单引号的——这是Haskell里Show类型类对Char的定义,所以直接用map show处理字符自然会得到带引号的结果。
要得到不带引号的单字符字符串,其实有个超简单的方法:把单个字符直接包装成单元素列表就行,因为Haskell里的String本质就是[Char]嘛。
修改后的函数可以写成这样:
charSymbol :: Int -> [String] charSymbol n = map (:[]) (take n ['a'..'z'])
这里的(:[])是一个简洁的匿名函数,它接受一个Char参数,返回只包含这个字符的字符串。比如(:[]) 'a'就会得到"a",完全符合你的需求。
如果你觉得(:[])有点太简洁不好理解,也可以写成更直白的lambda表达式,效果是一样的:
charSymbol :: Int -> [String] charSymbol n = map (\c -> [c]) (take n ['a'..'z'])
另外你提到的那篇文章可能是针对String类型的show问题,但咱们这里是Char类型,两者的Show实现不一样——show "a"会直接输出"a",但show 'a'就会输出"'a'",所以那篇文章的方法不适用这里哦。
内容的提问来源于stack exchange,提问作者Kye
相关产品推荐
相关产品推荐

