Haskell语言学习笔记(21)Array
来源:互联网 发布:手机淘宝怎样申请账号 编辑:程序博客网 时间:2024/05/24 04:18
Ix
数组下标类型
Prelude> :m +Data.ArrayPrelude Data.Array> data Colour = Red | Orange | Yellow | Green | Blue | Indigo | Violet deriving (Show,Eq,Ord,Ix)Prelude Data.Array> range (Yellow,Blue)[Yellow,Green,Blue]Prelude Data.Array> index (Yellow,Blue) Green1Prelude Data.Array> inRange (Yellow,Blue) RedFalse
Array UArray
数组类型,类型参数有两个,下标类型 i 和元素类型 e。
Array是装箱数组类型(元素为指针)
UArray是非装箱数组类型(元素为实体)
Prelude> :m +Data.ArrayPrelude Data.Array> a = array (1,10) ((1,1) : [(i, i + a!(i-1)) | i <- [2..10]]) Prelude Data.Array> :t aa :: (Ix e, Num e, Enum e) => Array e ePrelude Data.Array> a!1055Prelude Data.Array> bounds a(1,10)Prelude Data.Array> indices a[1,2,3,4,5,6,7,8,9,10]Prelude Data.Array> elems a[1,3,6,10,15,21,28,36,45,55]Prelude Data.Array> assocs a[(1,1),(2,3),(3,6),(4,10),(5,15),(6,21),(7,28),(8,36),(9,45),(10,55)]Prelude Data.Array> array ((1,1),(2,2)) [((2,1),"C"),((1,2),"B"),((1,1),"A"),((2,2),"D")] ! (2,2)"D"Prelude Data.Array> array ('a','c') [('a',"AAA"),('b',"BBB"),('c',"CCC")] ! 'b'"BBB"
Prelude> :m +Data.Array.UnboxedPrelude Data.Array.Unboxed> a = listArray (1,10) [1..10] :: UArray Int IntPrelude Data.Array.Unboxed> aarray (1,10) [(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10)]Prelude Data.Array.Unboxed> a // [(1,100),(2,99)]array (1,10) [(1,100),(2,99),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10)]
IOArray IOUArray
在IO monad中使用的数组。
Prelude> :m +Data.Array.IOPrelude Data.Array.IO> a <- newArray (0, 2) 0 :: IO (IOUArray Int Int)Prelude Data.Array.IO> getElems a[0,0,0]Prelude Data.Array.IO> writeArray a 0 3Prelude Data.Array.IO> readArray a 03Prelude Data.Array.IO> writeArray a 1 6Prelude Data.Array.IO> getElems a[3,6,0]Prelude Data.Array.IO> writeArray a 2 7Prelude Data.Array.IO> getElems a[3,6,7]
STArray STUArray
在ST monad中使用的数组。
-- https://stackoverflow.com/questions/8197032/starray-documentation-for-newbies-and-state-st-related-questionsimport Control.Monadimport Control.Monad.STimport Data.Array.STimport Data.Array.UnboxedprimesUpto :: Int -> [Int]primesUpto n = [p | (p, True) <- assocs $ sieve n]sieve :: Int -> UArray Int Boolsieve n = runSTUArray $ do sieve <- newArray (2, n) True forM_ [2..n] $ \p -> do isPrime <- readArray sieve p when isPrime $ do forM_ [p*2, p*3 .. n] $ \k -> do writeArray sieve k False return sievemain = print $ primesUpto 100
阅读全文
0 0
- Haskell语言学习笔记(21)Array
- Haskell语言学习笔记(1)
- Haskell语言学习笔记(2)
- Haskell语言学习笔记(4)Functor
- Haskell语言学习笔记(5)Applicative
- Haskell语言学习笔记(6)Monad
- Haskell语言学习笔记(8)Monoid
- Haskell语言学习笔记(14)Foldable
- Haskell语言学习笔记(16)Alternative
- Haskell语言学习笔记(17)MonadPlus
- Haskell语言学习笔记(18)Traversable
- Haskell语言学习笔记(22)MaybeT
- Haskell语言学习笔记(29)CPS
- Haskell语言学习笔记(31)ListT
- Haskell语言学习笔记(35)Contravariant
- Haskell语言学习笔记(39)Category
- Haskell语言学习笔记(42)Bifunctor
- Haskell语言学习笔记(45)Profunctor
- iOS二维码生成
- 1.前端之路-css-一颗爱心
- Java:如何寻找单链表的中间节点
- Haskell语言学习笔记(20)IORef, STRef
- Python学习资料分享
- Haskell语言学习笔记(21)Array
- Html特殊字符
- java异常
- Haskell语言学习笔记(22)MaybeT
- 【图像处理】MATLAB:直方图
- 排序算法之快速排序
- 第二章 img+列表标签
- C语言-数据类型
- codeforces contest 869 problem C(组合数)