agrupa :: String -> [(Char,Int)]
agrupa [ ] = [ ]
agrupa (x:xs) = let (l1, l2) = span' (==x) xs
in (x, (length l1) + 1) : agrupa l2
span' :: (a->Bool) -> [a] -> ([a],[a])
span' p l = (takeWhile p l, dropWhile p l)
这个函数得到一个字符串,并给出了每个字符有多少个字符?长度l1 +1 =>什么是一个?
我的问题是关于1
在(length l1) + 1
为什么我们需要它? 我真的很感激,如果你用不同的例子解释它,因为这种情况(如+ 1)我也见过很多次扫描(或只调试agrope部分)函数看看它是如何工作的?
感谢您的时间
为什么你定义'span'而不是使用['Data.List.span'](http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#五:跨度)? – leftaroundabout