例如,我需要一个函数:
gather :: Int -> [a] -> [[a]]
gather n list = ???
其中 gather 3 "Hello!" == ["Hel","ell","llo","ol!"]
。
我有一个可用的实现:
gather :: Int-> [a] -> [[a]]
gather n list =
unfoldr
(\x ->
if fst x + n > length (snd x) then
Nothing
else
Just
(take
n
(drop
(fst x)
(snd x)),
(fst x + 1, snd x)))
(0, list)
但我想知道语言本身是否已经有相关的功能?我查看了Data.List,但没有找到相关内容。
takeWhile
而不是filter
,但这只是一个相当温和的优化。 - Carln
个元素之外的所有元素”,即\xs -> zipWith const xs (drop n xs)
; 也许你可以在这里使用这个技巧。 - Daniel Wagner