长度l1 +1 =>一个用于什么?

use*_*428 0 haskell

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)
Run Code Online (Sandbox Code Playgroud)

这个函数得到一个字符串,并给我们每个字符有多少?

我的问题是有关1(length l1) + 1,我们为什么需要它?如果你用不同的例子解释它,我真的很感激,因为这样的情况(比如+ 1)我在扫描中已经看过很多次(或者只调试agrope部分)这个功能看看它是如何工作的?

谢谢你的时间

lef*_*out 6

+ 1是,因为你之前已经匹配的一个== x元素了,即x本身的格局(x:xs).如果你没有考虑到这一点,那么没有重复的列表会给出结果中每个元组的所有0s snd; 如你所知,它snd总是给出连续元素的实际数量.