inits Haskell, , 4.7.0.1 (GHC 7.8.3), . , fmap , .
inits [1,2,3,4] = [] : fmap (1:) (inits [2,3,4])
= [] : fmap (1:) ([] : fmap (2:) (inits [3,4]))
= [] : [1] : fmap (1:) (fmap (2:)) ([] : fmap (3:) (inits [4]))
....
, , take :
inits xs = [] : go (1 :: Int) xs where
go !l (_:ls) = take l xs : go (l+1) ls
go _ [] = []
Felgenhauer , , take, , .
:
inits = map reverse . scanl (flip (:)) []
(, map head . inits) . , , Chris Okasaki Banker, . , , scanl', scanl, GHC 7.8.4. inits O (n) ; O (n ^ 2) , conses . inits tails, Data.Sequence; . Data.Vector &mdash: .