您的位置:首页 > 产品设计 > UI/UE

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