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

时间:2013-11-21 20:18:01

标签: 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)

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

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

感谢您的时间

1 个答案:

答案 0 :(得分:6)

+ 1之所以存在,是因为您之前已将[{1}}个元素之一与== x本身匹配,格式为x。如果您没有考虑到这一点,那么没有重复的列表会在结果中的每个元组的(x:xs)中给出所有0个;如你所知,snd总是给出连续元素的实际数量。