Data.Sequence

Prelude> import Data.Sequence as Seq
Prelude Seq> :set -XOverloadedLists
Prelude Seq>

Construction

Prelude Seq> empty
fromList []
Prelude Seq> singleton 3
fromList [3]
Prelude Seq> 3 <| [4,5]
fromList [3,4,5]
Prelude Seq> [4,5] |> 6
fromList [4,5,6]
Prelude Seq> [3,4] >< [5,6]
fromList [3,4,5,6]

Repetition

Prelude Seq> Seq.replicate 3 3
fromList [3,3,3]
Prelude Seq> Seq.replicateA 3 (Just 3)
Just [3,3,3]
Prelude Seq> Seq.replicateM 3 (Just 3)
Just [3,3,3]
Prelude Seq> cycleTaking 9 [3,4,5]
fromList [3,4,5,3,4,5,3,4,5]

Iterative construction

Prelude Seq> iterateN 5 (+1) 1
fromList [1,2,3,4,5]
Prelude Seq> 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 Seq> Seq.null []
True
Prelude Seq> Seq.length [1,2,3]
3

Views

Prelude Seq> viewl [1,2,3]
1 :< fromList [2,3]
Prelude Seq> viewr [1,2,3]
fromList [1,2] :> 3

Scans

Prelude Seq> Seq.scanl (+) 0 [1,2,3]
fromList [0,1,3,6]
Prelude Seq> Seq.scanl1 (+) [1,2,3]
fromList [1,3,6]
Prelude Seq> Seq.scanr (+) 0 [1,2,3]
fromList [6,5,3,0]
Prelude Seq> Seq.scanr1 (+) [1,2,3]
fromList [6,5,3]

Sublists

Prelude Seq> Seq.tails [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 Seq> Seq.inits [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 Seq> chunksOf 2 [1..6]
fromList [fromList [1,2],fromList [3,4],fromList [5,6]]
Prelude Seq> takeWhileL even [2,4,5,6,8]
fromList [2,4]
Prelude Seq> takeWhileR even [2,4,5,6,8]
fromList [6,8]
Prelude Seq> dropWhileL even [2,4,5,6,8]
fromList [5,6,8]
Prelude Seq> dropWhileR even [2,4,5,6,8]
fromList [2,4,5]
Prelude Seq> spanl even [2,4,5,6,8]
[2,4],fromList [5,6,8]
Prelude Seq> spanr even [2,4,5,6,8]
[6,8],fromList [2,4,5]
Prelude Seq> breakl even [2,4,5,6,8]
[],fromList [2,4,5,6,8]
Prelude Seq> breakr even [2,4,5,6,8]
[],fromList [2,4,5,6,8]
Prelude Seq> Seq.partition even [2,4,5,6,8]
[2,4,6,8],fromList [5]
Prelude Seq> Seq.filter even [2,4,5,6,8]
fromList [2,4,6,8]

Sorting

Prelude Seq Data.Function> Seq.sort ["one","two","three","four"]
fromList ["four","one","three","two"]
Prelude Seq Data.Function> Seq.sortBy (compare `on` Prelude.length) ["one","two","three","four"]
fromList ["one","two","four","three"]
Prelude Seq Data.Function> unstableSort ["one","two","three","four"]
fromList ["four","one","three","two"]
Prelude Seq Data.Function> unstableSortBy (compare `on` Prelude.length) ["one","two","three","four"]
fromList ["one","two","four","three"]

Indexing

Prelude Seq> Seq.lookup 3 [1..6]
Just 4
Prelude Seq> [1..6] !? 3
Just 4
Prelude Seq> [1..6] `index` 3
4
Prelude Seq> adjust (+1) 3 [1..6]
fromList [1,2,3,5,5,6]
Prelude Seq> update 3 1 [1..6]
fromList [1,2,3,1,5,6]
Prelude Seq> Seq.take 3 [1..6]
fromList [1,2,3]
Prelude Seq> Seq.drop 3 [1..6]
fromList [4,5,6]
Prelude Seq> insertAt 3 3 [1..6]
fromList [1,2,3,3,4,5,6]
Prelude Seq> deleteAt 3 [1..6]
fromList [1,2,3,5,6]
Prelude Seq> Seq.splitAt 3 [1..6]
[1,2,3],fromList [4,5,6]
Prelude Seq> elemIndexL 3 [1,2,3,3,3,4,5]
Just 2
Prelude Seq> elemIndexL 3 [1,2,3,3,6,3,3,4,5]
Just 2
Prelude Seq> elemIndicesL 3 [1,2,3,3,6,3,3,4,5]
[2,3,5,6]
Prelude Seq> elemIndexR 3 [1,2,3,3,6,3,3,4,5]
Just 6
Prelude Seq> elemIndicesR 3 [1,2,3,3,6,3,3,4,5]
[6,5,3,2]
Prelude Seq> findIndexL even [1,2,3,3,6,3,3,4,5]
Just 1
Prelude Seq> findIndicesL even [1,2,3,3,6,3,3,4,5]
[1,4,7]
Prelude Seq> findIndexR even [1,2,3,3,6,3,3,4,5]
Just 7
Prelude Seq> findIndicesR even [1,2,3,3,6,3,3,4,5]
[7,4,1]

Folds

Prelude Seq> foldMapWithIndex (\n a -> fmap (+n) a) [[1],[2]]
[1,3]
Prelude Seq> foldlWithIndex (\a b c -> a+b+c) 0 [1..3]
9
Prelude Seq> foldrWithIndex (\a b c -> a+b+c) 0 [1..3]
9

Transformations

Prelude Seq> mapWithIndex (+) [1..3]
fromList [1,3,5]
Prelude Seq> traverseWithIndex (\a b -> [b+a,b+a+1]) [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 Seq> Seq.reverse [1..4]
fromList [4,3,2,1]
Prelude Seq> Seq.intersperse 9 [1..3]
fromList [1,9,2,9,3]

Zips

Prelude Seq> Seq.zip [1..3] [1..3]
fromList [(1,1),(2,2),(3,3)]
Prelude Seq> Seq.zipWith (*) [1..3] [1..3]
fromList [1,4,9]

Haskell语言学习笔记(53)Data.Sequence的更多相关文章

  1. Haskell语言学习笔记(88)语言扩展(1)

    ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...

  2. Haskell语言学习笔记(20)IORef, STRef

    IORef 一个在IO monad中使用变量的类型. 函数 参数 功能 newIORef 值 新建带初值的引用 readIORef 引用 读取引用的值 writeIORef 引用和值 设置引用的值 m ...

  3. Haskell语言学习笔记(69)Yesod

    Yesod Yesod 是一个使用 Haskell 语言的 Web 框架. 安装 Yesod 首先更新 Haskell Platform 到最新版 (Yesod 依赖的库非常多,版本不一致的话很容易安 ...

  4. Haskell语言学习笔记(79)lambda演算

    lambda演算 根据维基百科,lambda演算(英语:lambda calculus,λ-calculus)是一套从数学逻辑中发展,以变量绑定和替换的规则,来研究函数如何抽象化定义.函数如何被应用以 ...

  5. Haskell语言学习笔记(39)Category

    Category class Category cat where id :: cat a a (.) :: cat b c -> cat a b -> cat a c instance ...

  6. Haskell语言学习笔记(28)Data.Map

    Map Prelude> import Data.Map as Map Prelude Map> :set -XOverloadedLists Prelude Map> Overlo ...

  7. Haskell语言学习笔记(48)Data.Tuple

    Data.Tuple fst :: (a,b) -> a fst (x,_) = x snd :: (a,b) -> b snd (_,y) = y curry :: ((a, b) -& ...

  8. Haskell语言学习笔记(93)Data.Text

    Data.Text.Read Prelude> :set -XOverloadedStrings Prelude> :m +Data.Text.Read Prelude Data.Text ...

  9. Haskell语言学习笔记(81)Data.Typeable

    Data.Typeable 利用 Data.Typeable,可以打印动态类型信息. class Typeable (a :: k) where typeRep# :: TypeRep a typeR ...

随机推荐

  1. 让node支持es模块化(export、import)的方法

    node版本v7.9.0,支持了大部分es6的功能,但还不支持es6模块化(export.import). 检测ES6 可以使用es-checker来检测当前Node.js对ES6的支持情况. 使用命 ...

  2. 创建对象的一种方式&一种继承机制(代码实例)

    /* 创建对象的一种方式:混合的构造函数/原型方式, *用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性(方法) */ function People(sname){ this.nam ...

  3. bzoj4247挂饰——压缩的动态规划

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4247 1.dp之前要先按挂钩个数从大到小排序,不然挂钩一度用成负的也可能是正确的,不仅脚标难 ...

  4. Spring Cloud 入门 之 Zuul 篇(五)

    原文地址:Spring Cloud 入门 之 Zuul 篇(五) 博客地址:http://www.extlight.com 一.前言 随着业务的扩展,微服务会不对增加,相应的其对外开放的 API 接口 ...

  5. go get中的...

    go get命令是go自带的包下载工具. 如果配置了GOPATH,下载的文件放置于GOPATH/src下面 例如 $ go get github.com/garyburd/redigo/redis $ ...

  6. opencv读取并播放avi视屏

    视屏的本质是一些静态的图像的集合,opencv可以不断读取视屏中的图片,显示,就产生了类似电影的效果. 这样也就可以通过opencv对实时的视屏流进行处理了. #include "stdaf ...

  7. SpringBoot 自定义线程池

    本教程目录: 自定义线程池 配置spring默认的线程池 1. 自定义线程池 1.1 修改application.properties task.pool.corePoolSize=20 task.p ...

  8. WDA编译失败问题

    1.放假回来,wda编译失败,报错如下 2018-09-25 10:03:09.020964+0800 WebDriverAgentRunner-Runner[335:33309] +[CATrans ...

  9. BatchNormalization批量归一化

    动机: 防止隐层分布多次改变,BN让每个隐层节点的激活输入分布缩小到-1和1之间. 好处: 缩小输入空间,从而降低调参难度:防止梯度爆炸/消失,从而加速网络收敛. BN计算公式: keras.laye ...

  10. Python单例模式的4种实现方法

    #-*- encoding=utf-8 -*- print '----------------------方法1--------------------------' #方法1,实现__new__方法 ...