【发布时间】:2022-01-15 15:46:57
【问题描述】:
我必须编写elemFreqByFirstOcc :: Eq a => [a] -> [(a, Int)],它应该计算列表中每个元素的出现次数,并在元组列表中返回元素和结果。
例如:
elemFreqByFirstOcc "adbcba" == [('a',2),('d',1),('b',2),('c',1)]
elemFreqByFirstOcc [1,2,1,3,3,2,1,4,3,2,1,1,1,4,6,5] == [(1,6),(2,3 ),(3,3),(4,2),(6,1),(5,1)]
到目前为止,我有这段代码,如果列表中的所有元素只显示一次,它就可以正常工作,但是当一个元素出现更多次时,它们每次都会被计算在内。 (所以对于第一个例子,它返回[('a',2),('d',1),('b',2),('c',1),('b',1),('a',1)])
elemFreqByFirstOcc :: Eq a => [a] -> [(a, Int)]
elemFreqByFirstOcc [] = []
elemFreqByFirstOcc [x] = [(x, 1)]
elemFreqByFirstOcc (x:xs) = zip [x] [(length $ filter (==x) (x:xs))] ++ elemFreqByFirstOcc xs
【问题讨论】: