Haskell语言学习笔记(53)Data.Sequence
2017-12-14 22:35
309 查看
Data.Sequence
Construction
Prelude Data.Sequence> empty fromList [] Prelude Data.Sequence> singleton 3 fromList [3] Prelude Data.Sequence> 3 <| fromList [4,5] fromList [3,4,5] Prelude Data.Sequence> fromList [4,5] |> 6 fromList [4,5,6] Prelude Data.Sequence> fromList [3,4] >< fromList [5,6] fromList [3,4,5,6]
Repetition
Prelude Data.Sequence> :m Prelude> import Data.Sequence as S Prelude S> S.replicate 3 3 fromList [3,3,3] Prelude S> S.replicateA 3 (Just 3) Just (fromList [3,3,3]) Prelude S> S.replicateM 3 (Just 3) Just (fromList [3,3,3]) Prelude S> cycleTaking 9 $ fromList [3,4,5] fromList [3,4,5,3,4,5,3,4,5]
Iterative construction
Prelude S> iterateN 5 (+1) 1 fromList [1,2,3,4,5] Prelude S> unfoldr (\b -> if b < 10 then Just (b, b+1) else Nothing) 1 fromList [1,2,3,4,5,6,7,8,9]
Queries
Prelude S> S.null $ fromList [] True Prelude S> S.length $ fromList [1,2,3] 3
Views
Prelude S> viewl $ fromList [1,2,3] 1 :< fromList [2,3] Prelude S> viewr $ fromList [1,2,3] fromList [1,2] :> 3
Scans
Prelude S> S.scanl (+) 0 $ fromList [1,2,3] fromList [0,1,3,6] Prelude S> S.scanl1 (+) $ fromList [1,2,3] fromList [1,3,6] Prelude S> S.scanr (+) 0 $ fromList [1,2,3] fromList [6,5,3,0] Prelude S> S.scanr1 (+) $ fromList [1,2,3] fromList [6,5,3]
Sublists
Prelude S> S.tails $ fromList [1..6] fromList [fromList [1,2,3,4,5,6],fromList [2,3,4,5,6],fromList [3,4,5,6],fromList [4,5,6],fromList [5,6],fromList [6],fromList []] Prelude S> S.inits $ fromList [1..6] fromList [fromList [],fromList [1],fromList [1,2],fromList [1,2,3],fromList [1,2,3,4],fromList [1,2,3,4,5],fromList [1,2,3,4,5,6]] Prelude S> chunksOf 2 $ fromList [1..6] fromList [fromList [1,2],fromList [3,4],fromList [5,6]] Prelude S> takeWhileL even $ fromList [2,4,5,6,8] fromList [2,4] Prelude S> takeWhileR even $ fromList [2,4,5,6,8] fromList [6,8] Prelude S> dropWhileL even $ fromList [2,4,5,6,8] fromList [5,6,8] Prelude S> dropWhileR even $ fromList [2,4,5,6,8] fromList [2,4,5] Prelude S> spanl even $ fromList [2,4,5,6,8] (fromList [2,4],fromList [5,6,8]) Prelude S> spanr even $ fromList [2,4,5,6,8] (fromList [6,8],fromList [2,4,5]) Prelude S> breakl even $ fromList [2,4,5,6,8] (fromList [],fromList [2,4,5,6,8]) Prelude S> breakr even $ fromList [2,4,5,6,8] (fromList [],fromList [2,4,5,6,8]) Prelude S> S.partition even $ fromList [2,4,5,6,8] (fromList [2,4,6,8],fromList [5]) Prelude S> S.filter even $ fromList [2,4,5,6,8] fromList [2,4,6,8]
Sorting
Prelude S Data.Function> S.sort $ fromList ["one","two","three","four"] fromList ["four","one","three","two"] Prelude S Data.Function> S.sortBy (compare `on` Prelude.length) $ fromList ["one","two","three","four"] fromList ["one","two","four","three"] Prelude S Data.Function> unstableSort $ fromList ["one","two","three","four"] fromList ["four","one","three","two"] Prelude S Data.Function> unstableSortBy (compare `on` Prelude.length) $ fromList ["one","two","three","four"] fromList ["one","two","four","three"]
Indexing
Prelude S> S.lookup 3 $ fromList [1..6] Just 4 Prelude S> fromList [1..6] !? 3 Just 4 Prelude S> fromList [1..6] `index` 3 4 Prelude S> adjust (+1) 3 $ fromList [1..6] fromList [1,2,3,5,5,6] Prelude S> update 3 1 $ fromList [1..6] fromList [1,2,3,1,5,6] Prelude S> S.take 3 $ fromList [1..6] fromList [1,2,3] Prelude S> S.drop 3 $ fromList [1..6] fromList [4,5,6] Prelude S> insertAt 3 3 $ fromList [1..6] fromList [1,2,3,3,4,5,6] Prelude S> deleteAt 3 $ fromList [1..6] fromList [1,2,3,5,6] Prelude S> S.splitAt 3 $ fromList [1..6] (fromList [1,2,3],fromList [4,5,6]) Prelude S> elemIndexL 3 $ fromList [1,2,3,3,3,4,5] Just 2 Prelude S> elemIndexL 3 $ fromList [1,2,3,3,6,3,3,4,5] Just 2 Prelude S> elemIndicesL 3 $ fromList [1,2,3,3,6,3,3,4,5] [2,3,5,6] Prelude S> elemIndexR 3 $ fromList [1,2,3,3,6,3,3,4,5] Just 6 Prelude S> elemIndicesR 3 $ fromList [1,2,3,3,6,3,3,4,5] [6,5,3,2] Prelude S> findIndexL even $ fromList [1,2,3,3,6,3,3,4,5] Just 1 Prelude S> findIndicesL even $ fromList [1,2,3,3,6,3,3,4,5] [1,4,7] Prelude S> findIndexR even $ fromList [1,2,3,3,6,3,3,4,5] Just 7 Prelude S> findIndicesR even $ fromList [1,2,3,3,6,3,3,4,5] [7,4,1]
Folds
Prelude S> foldMapWithIndex (\n a -> fmap (+n) a) $ fromList [[1],[2]] [1,3] Prelude S> foldlWithIndex (\a b c -> a+b+c) 0 $ fromList [1..3] 9 Prelude S> foldrWithIndex (\a b c -> a+b+c) 0 $ fromList [1..3] 9
Transformations
Prelude S> mapWithIndex (+) $ fromList [1..3] fromList [1,3,5] Prelude S> traverseWithIndex (\a b -> [b+a,b+a+1]) $ fromList [1..3] [fromList [1,3,5],fromList [1,3,6],fromList [1,4,5],fromList [1,4,6],fromList [2,3,5],fromList [2,3,6],fromList [2,4,5],fromList [2,4,6]] Prelude S> S.reverse $ fromList [1..4] fromList [4,3,2,1] Prelude S> S.intersperse 9 $ fromList [1..3] fromList [1,9,2,9,3]
Zips
Prelude S> S.zip (fromList [1..3]) (fromList [1..3]) fromList [(1,1),(2,2),(3,3)] Prelude S> S.zipWith (*) (fromList [1..3]) (fromList [1..3]) fromList [1,4,9]
相关文章推荐
- Haskell语言学习笔记(48)Data.Tuple
- Haskell语言学习笔记(54)Data.Set
- Haskell语言学习笔记(36)Data.List.Zipper
- Haskell语言学习笔记(32)Data.Maybe, Data.Either
- Haskell语言学习笔记(12)Data.Function
- Haskell语言学习笔记(15)Data.List
- Haskell语言学习笔记(28)Data.Map
- Haskell语言学习笔记(44)Lens(2)
- Haskell语言学习笔记(29)CPS
- Haskell语言学习笔记(23)MonadReader, Reader, ReaderT
- Haskell语言学习笔记(45)Profunctor
- Haskell语言学习笔记(4)Functor
- Haskell语言学习笔记(16)Alternative
- Haskell语言学习笔记(2)
- Haskell语言学习笔记(24)MonadWriter, Writer, WriterT
- Haskell语言学习笔记(46)Parsec(3)
- Haskell语言学习笔记(20)IORef, STRef
- Haskell语言学习笔记(47)Arrow(2)
- Haskell语言学习笔记(35)Contravariant
- Haskell语言学习笔记(25)MonadState, State, StateT