2011-11-07 48 views
9

如果给定一个字符串,我可以让每个字符组成该字符串吗?Haskell从字符串中获取字符数组?

+0

是。我认为字符串是Haskell中的char列表。 –

+0

你想对角色做什么? –

+0

是的,这个函数被称为'id'。 –

回答

11

在Haskell中,字符串只是(喜欢的)字符列表;你可以找到该行

type String = [Char] 

某处在每个Haskell实现的源代码中。这使得查找某个字符(elemIndex 'a' mystring)或计算每个字符(map (head &&& length) . group . sort)的频率的第一次出现的任务变得微不足道。

因此,您也可以使用字符串列表的常用语法。实际上,"foo"只是['f','o','o']的糖,而'f' : 'o' : 'o' : []只是糖。只要你喜欢,你可以对它们进行模式匹配,映射和折叠。例如,如果您想获取位于mystring的位置n的元素,则可以使用mystring !! n,前提是0 <= n < length mystring

+0

'地图总和。组。 sort'对于字符串来说是不合适的。也许你的意思是'map(head &&& length)'。组。 sort'? – hammar

+0

@hammar:谢谢 – fuz

+0

所以说我将一个字符串作为参数传递给一个函数,我将如何实际访问每个字符?使用地图? – user997112

6

string类型只是alias[Char]所以你不需要做任何事情。

Prelude> tail "Hello" 
"ello" 
Prelude> ['H', 'e', 'l', 'l', 'o'] 
"Hello" 
Prelude> "Hello" !! 4 
'o' 
10

好,问题不说,他希望有一个数组:

import Data.Array 
stringToArray :: String -> Array 
stringToArray s = listArray (0, length s - 1) s 
+0

这就是我所期待的。事实上,这是对问题的正确答案,即使这不是OP的意图。 – setholopolus