我是新来的 haskell ,我目前正试图解决一个小问题。
我想创建一个函数occurrences
,其定义如下:
occurrences:: Int -> String -> [[(Char, Int)]]
该函数接受Int和String作为其参数;其中Int表示要打印的出现列表的数量。每个字符的出现数量应按降序排序。
例如,occurrences 2 'hi'
应返回[[('h', 1), ('i', 1)], [('h', 1), ('i', 1)]]
,occurrences 3 'foo'
应返回[[('o', 2), ('f', 1)], [('o', 2), ('f', 1)], [('o', 2), ('f', 1)]]
到目前为止,我已经添加了以下内容,作为occurrence函数实现的一部分。
occurrences str = map (\x -> [(head x, length x)]) $ group $ sort str
但这只是打印[[('h',1)],[('i',1)]]
而不是[[('h', 1), ('i', 1)]]
,我不知道如何根据输入返回n
的列表数,因为我是Haskell的新手。
我能得到帮助吗?
2条答案
按热度按时间ars1skjm1#
可以使用
concat
将[[('h',1)],[('i',1)]]
转换为[('h', 1), ('i', 1)]
。完成后,您需要将replicate
转换指定的次数。col17t5w2#
效果很好。
输出: