Spec-Zone.ru › Haskell 9

Data.Array.IArray

Авторские права (c) Университет Глазго 2001
Лицензия BSD-стиль (см. файл libraries/base/LICENSE)
Поддерживающий libraries@haskell.org
Стабильность экспериментальная
Переносимость непереносимая (использует Data.Array.Base)
Safe Haskell Достоверный
Язык Haskell2010

Содержание

  • Классы массивов
  • Неизменяемые нестрогие (упакованные) массивы
  • Создание массивов
  • Доступ к массивам
  • Склады массивов
  • Инкрементные обновления массивов
  • Производные массивы

Описание

Неизменяемые массивы с перегруженным интерфейсом. Для типов массивов, которые могут использоваться с этим интерфейсом, см. тип Array экспортированный этим модулем и модуль Data.Array.Unboxed. Другие пакеты, такие как diffarray, также предоставляют массивы с использованием этого интерфейса.

Классы массивов

class IArray (a :: Тип -> Тип -> Тип) e Исходный код

Класс неизменяемых типов массивов.

Тип массива имеет вид (a i e) , где a — конструктор типа массива (вид * -> * -> *), i — тип индекса (член класса Ix), а e — тип элемента. Класс IArray параметризован как по a, так и по e, чтобы можно было определять специализированные экземпляры для определенных типов элементов.

Минимальное полное определение

bounds, numElements, unsafeArray, unsafeAt

Примеры реализации
Подробности примеров
IArray UArray Int16 Исходный код
Подробности реализации

Определено в Data.Array.Base

Методы

bounds :: Ix i => UArray i Int16 -> (i, i) Исходный код

numElements :: Ix i => UArray i Int16 -> Int Исходный код

unsafeArray :: Ix i => (i, i) -> [(Int, Int16)] -> UArray i Int16 Исходный код

unsafeAt :: Ix i => UArray i Int16 -> Int -> Int16 Исходный код

unsafeReplace :: Ix i => UArray i Int16 -> [(Int, Int16)] -> UArray i Int16 Исходный код

unsafeAccum :: Ix i => (Int16 -> e' -> Int16) -> UArray i Int16 -> [(Int, e')] -> UArray i Int16 Исходный код

unsafeAccumArray :: Ix i => (Int16 -> e' -> Int16) -> Int16 -> (i, i) -> [(Int, e')] -> UArray i Int16 Исходный код

IArray UArray Int32 Исходный код
Подробности реализации

Определено в Data.Array.Base

Методы

bounds :: Ix i => UArray i Int32 -> (i, i) Исходный код

numElements :: Ix i => UArray i Int32 -> Int Исходный код

unsafeArray :: Ix i => (i, i) -> [(Int, Int32)] -> UArray i Int32 Исходный код

unsafeAt :: Ix i => UArray i Int32 -> Int -> Int32 Исходный код

unsafeReplace :: Ix i => UArray i Int32 -> [(Int, Int32)] -> UArray i Int32 Исходный код

unsafeAccum :: Ix i => (Int32 -> e' -> Int32) -> UArray i Int32 -> [(Int, e')] -> UArray i Int32 Исходный код

unsafeAccumArray :: Ix i => (Int32 -> e' -> Int32) -> Int32 -> (i, i) -> [(Int, e')] -> UArray i Int32 Исходный код

IArray UArray Int64 Исходный код
Подробности экземпляра

Определено в Data.Array.Base

Методы

bounds :: Ix i => UArray i Int64 -> (i, i) Исходный код

numElements :: Ix i => UArray i Int64 -> Int Исходный код

unsafeArray :: Ix i => (i, i) -> [(Int, Int64)] -> UArray i Int64 Исходный код

unsafeAt :: Ix i => UArray i Int64 -> Int -> Int64 Исходный код

unsafeReplace :: Ix i => UArray i Int64 -> [(Int, Int64)] -> UArray i Int64 Исходный код

unsafeAccum :: Ix i => (Int64 -> e' -> Int64) -> UArray i Int64 -> [(Int, e')] -> UArray i Int64 Исходный код

unsafeAccumArray :: Ix i => (Int64 -> e' -> Int64) -> Int64 -> (i, i) -> [(Int, e')] -> UArray i Int64 Исходный код

IArray UArray Int8 Исходный код
Подробности экземпляра

Определено в Data.Array.Base

Методы

bounds :: Ix i => UArray i Int8 -> (i, i) Исходный код

numElements :: Ix i => UArray i Int8 -> Int Исходный код

unsafeArray :: Ix i => (i, i) -> [(Int, Int8)] -> UArray i Int8 Исходный код

unsafeAt :: Ix i => UArray i Int8 -> Int -> Int8 Исходный код

unsafeReplace :: Ix i => UArray i Int8 -> [(Int, Int8)] -> UArray i Int8 Исходный код

unsafeAccum :: Ix i => (Int8 -> e' -> Int8) -> UArray i Int8 -> [(Int, e')] -> UArray i Int8 Исходный код

unsafeAccumArray :: Ix i => (Int8 -> e' -> Int8) -> Int8 -> (i, i) -> [(Int, e')] -> UArray i Int8 Исходный код

IArray UArray Word16 Исходный код
Подробности экземпляра

Определено в Data.Array.Base

Методы

bounds :: Ix i => UArray i Word16 -> (i, i) Исходный код

numElements :: Ix i => UArray i Word16 -> Int Исходный код

unsafeArray :: Ix i => (i, i) -> [(Int, Word16)] -> UArray i Word16 Исходный код

unsafeAt :: Ix i => UArray i Word16 -> Int -> Word16 Исходный код

unsafeReplace :: Ix i => UArray i Word16 -> [(Int, Word16)] -> UArray i Word16 Исходный код

unsafeAccum :: Ix i => (Word16 -> e' -> Word16) -> UArray i Word16 -> [(Int, e')] -> UArray i Word16 Исходный код

unsafeAccumArray :: Ix i => (Word16 -> e' -> Word16) -> Word16 -> (i, i) -> [(Int, e')] -> UArray i Word16 Исходный код

IArray UArray Word32 Исходный код
Подробности экземпляра

Определено в Data.Array.Base

Методы

bounds :: Ix i => UArray i Word32 -> (i, i) Исходный код

numElements :: Ix i => UArray i Word32 -> Int Исходный код

unsafeArray :: Ix i => (i, i) -> [(Int, Word32)] -> UArray i Word32 Исходный код

unsafeAt :: Ix i => UArray i Word32 -> Int -> Word32 Исходный код

unsafeReplace :: Ix i => UArray i Word32 -> [(Int, Word32)] -> UArray i Word32 Исходный код

unsafeAccum :: Ix i => (Word32 -> e' -> Word32) -> UArray i Word32 -> [(Int, e')] -> UArray i Word32 Исходный код

unsafeAccumArray :: Ix i => (Word32 -> e' -> Word32) -> Word32 -> (i, i) -> [(Int, e')] -> UArray i Word32 Исходный код

IArray UArray Word64 Исходный код
Подробности экземпляра

Определено в Data.Array.Base

Методы

bounds :: Ix i => UArray i Word64 -> (i, i) Источник

numElements :: Ix i => UArray i Word64 -> Int Источник

unsafeArray :: Ix i => (i, i) -> [(Int, Word64)] -> UArray i Word64 Источник

unsafeAt :: Ix i => UArray i Word64 -> Int -> Word64 Источник

unsafeReplace :: Ix i => UArray i Word64 -> [(Int, Word64)] -> UArray i Word64 Источник

unsafeAccum :: Ix i => (Word64 -> e' -> Word64) -> UArray i Word64 -> [(Int, e')] -> UArray i Word64 Источник

unsafeAccumArray :: Ix i => (Word64 -> e' -> Word64) -> Word64 -> (i, i) -> [(Int, e')] -> UArray i Word64 Источник

IArray UArray Word8 Источник
Подробности экземпляра

Определено в Data.Array.Base

Методы

bounds :: Ix i => UArray i Word8 -> (i, i) Источник

numElements :: Ix i => UArray i Word8 -> Int Источник

unsafeArray :: Ix i => (i, i) -> [(Int, Word8)] -> UArray i Word8 Источник

unsafeAt :: Ix i => UArray i Word8 -> Int -> Word8 Источник

unsafeReplace :: Ix i => UArray i Word8 -> [(Int, Word8)] -> UArray i Word8 Источник

unsafeAccum :: Ix i => (Word8 -> e' -> Word8) -> UArray i Word8 -> [(Int, e')] -> UArray i Word8 Источник

unsafeAccumArray :: Ix i => (Word8 -> e' -> Word8) -> Word8 -> (i, i) -> [(Int, e')] -> UArray i Word8 Источник

IArray UArray Bool Источник
Подробности экземпляра

Определено в Data.Array.Base

Методы

bounds :: Ix i => UArray i Bool -> (i, i) Исходный код

numElements :: Ix i => UArray i Bool -> Int Исходный код

unsafeArray :: Ix i => (i, i) -> [(Int, Bool)] -> UArray i Bool Исходный код

unsafeAt :: Ix i => UArray i Bool -> Int -> Bool Исходный код

unsafeReplace :: Ix i => UArray i Bool -> [(Int, Bool)] -> UArray i Bool Исходный код

unsafeAccum :: Ix i => (Bool -> e' -> Bool) -> UArray i Bool -> [(Int, e')] -> UArray i Bool Исходный код

unsafeAccumArray :: Ix i => (Bool -> e' -> Bool) -> Bool -> (i, i) -> [(Int, e')] -> UArray i Bool Исходный код

IArray UArray Char Исходный код
Подробности экземпляра

Определено в Data.Array.Base

Методы

bounds :: Ix i => UArray i Char -> (i, i) Исходный код

numElements :: Ix i => UArray i Char -> Int Исходный код

unsafeArray :: Ix i => (i, i) -> [(Int, Char)] -> UArray i Char Исходный код

unsafeAt :: Ix i => UArray i Char -> Int -> Char Исходный код

unsafeReplace :: Ix i => UArray i Char -> [(Int, Char)] -> UArray i Char Исходный код

unsafeAccum :: Ix i => (Char -> e' -> Char) -> UArray i Char -> [(Int, e')] -> UArray i Char Исходный код

unsafeAccumArray :: Ix i => (Char -> e' -> Char) -> Char -> (i, i) -> [(Int, e')] -> UArray i Char Исходный код

IArray UArray Double Исходный код
Подробности экземпляра

Определено в Data.Array.Base

Методы

bounds :: Ix i => UArray i Double -> (i, i) Исходный код

numElements :: Ix i => UArray i Double -> Int Исходный код

unsafeArray :: Ix i => (i, i) -> [(Int, Double)] -> UArray i Double Исходный код

unsafeAt :: Ix i => UArray i Double -> Int -> Double Исходный код

unsafeReplace :: Ix i => UArray i Double -> [(Int, Double)] -> UArray i Double Исходный код

unsafeAccum :: Ix i => (Double -> e' -> Double) -> UArray i Double -> [(Int, e')] -> UArray i Double Исходный код

unsafeAccumArray :: Ix i => (Double -> e' -> Double) -> Double -> (i, i) -> [(Int, e')] -> UArray i Double Исходный код

IArray UArray Float Исходный код
Подробности экземпляра

Определено в Data.Array.Base

Методы

bounds :: Ix i => UArray i Float -> (i, i) Исходный код

numElements :: Ix i => UArray i Float -> Int Исходный код

unsafeArray :: Ix i => (i, i) -> [(Int, Float)] -> UArray i Float Исходный код

unsafeAt :: Ix i => UArray i Float -> Int -> Float Исходный код

unsafeReplace :: Ix i => UArray i Float -> [(Int, Float)] -> UArray i Float Исходный код

unsafeAccum :: Ix i => (Float -> e' -> Float) -> UArray i Float -> [(Int, e')] -> UArray i Float Исходный код

unsafeAccumArray :: Ix i => (Float -> e' -> Float) -> Float -> (i, i) -> [(Int, e')] -> UArray i Float Исходный код

IArray UArray Int Исходный код
Подробности экземпляра

Определено в Data.Array.Base

Методы

bounds :: Ix i => UArray i Int -> (i, i) Исходный код

numElements :: Ix i => UArray i Int -> Int Исходный код

unsafeArray :: Ix i => (i, i) -> [(Int, Int)] -> UArray i Int Исходный код

unsafeAt :: Ix i => UArray i Int -> Int -> Int Исходный код

unsafeReplace :: Ix i => UArray i Int -> [(Int, Int)] -> UArray i Int Исходный код

unsafeAccum :: Ix i => (Int -> e' -> Int) -> UArray i Int -> [(Int, e')] -> UArray i Int Исходный код

unsafeAccumArray :: Ix i => (Int -> e' -> Int) -> Int -> (i, i) -> [(Int, e')] -> UArray i Int Исходный код

IArray UArray Word Исходный код
Подробности экземпляра

Определено в Data.Array.Base

Методы

bounds :: Ix i => UArray i Word -> (i, i) Исходный код

numElements :: Ix i => UArray i Word -> Int Исходный код

unsafeArray :: Ix i => (i, i) -> [(Int, Word)] -> UArray i Word Исходный код

unsafeAt :: Ix i => UArray i Word -> Int -> Word Исходный код

unsafeReplace :: Ix i => UArray i Word -> [(Int, Word)] -> UArray i Word Исходный код

unsafeAccum :: Ix i => (Word -> e' -> Word) -> UArray i Word -> [(Int, e')] -> UArray i Word Исходный код

unsafeAccumArray :: Ix i => (Word -> e' -> Word) -> Word -> (i, i) -> [(Int, e')] -> UArray i Word Исходный код

IArray Array e Исходный код
Подробности экземпляра

Определено в Data.Array.Base

Методы

bounds :: Ix i => Array i e -> (i, i) Исходный код

numElements :: Ix i => Array i e -> Int Исходный код

unsafeArray :: Ix i => (i, i) -> [(Int, e)] -> Array i e Исходный код

unsafeAt :: Ix i => Array i e -> Int -> e Исходный код

unsafeReplace :: Ix i => Array i e -> [(Int, e)] -> Array i e Исходный код

unsafeAccum :: Ix i => (e -> e' -> e) -> Array i e -> [(Int, e')] -> Array i e Исходный код

unsafeAccumArray :: Ix i => (e -> e' -> e) -> e -> (i, i) -> [(Int, e')] -> Array i e Исходный код

IArray UArray (FunPtr a) Исходный код
Подробности экземпляра

Определено в Data.Array.Base

Методы

bounds :: Ix i => UArray i (FunPtr a) -> (i, i) Исходный код

numElements :: Ix i => UArray i (FunPtr a) -> Int Исходный код

unsafeArray :: Ix i => (i, i) -> [(Int, FunPtr a)] -> UArray i (FunPtr a) Исходный код

unsafeAt :: Ix i => UArray i (FunPtr a) -> Int -> FunPtr a Исходный код

unsafeReplace :: Ix i => UArray i (FunPtr a) -> [(Int, FunPtr a)] -> UArray i (FunPtr a) Исходный код

unsafeAccum :: Ix i => (FunPtr a -> e' -> FunPtr a) -> UArray i (FunPtr a) -> [(Int, e')] -> UArray i (FunPtr a) Исходный код

unsafeAccumArray :: Ix i => (FunPtr a -> e' -> FunPtr a) -> FunPtr a -> (i, i) -> [(Int, e')] -> UArray i (FunPtr a) Исходный код

IArray UArray (Указатель a) Исходный код
Подробности экземпляра

Определено в Data.Array.Base

Методы

bounds :: Ix i => UArray i (Указатель a) -> (i, i) Исходный код

numElements :: Ix i => UArray i (Указатель a) -> Целое Исходный код

unsafeArray :: Ix i => (i, i) -> [(Целое, Указатель a)] -> UArray i (Указатель a) Исходный код

unsafeAt :: Ix i => UArray i (Указатель a) -> Целое -> Указатель a Исходный код

unsafeReplace :: Ix i => UArray i (Указатель a) -> [(Целое, Указатель a)] -> UArray i (Указатель a) Исходный код

unsafeAccum :: Ix i => (Указатель a -> e' -> Указатель a) -> UArray i (Указатель a) -> [(Целое, e')] -> UArray i (Указатель a) Исходный код

unsafeAccumArray :: Ix i => (Указатель a -> e' -> Указатель a) -> Указатель a -> (i, i) -> [(Целое, e')] -> UArray i (Указатель a) Исходный код

IArray UArray (Стабильный указатель a) Исходный код
Подробности экземпляра

Определено в Data.Array.Base

Методы

bounds :: Ix i => UArray i (Стабильный указатель a) -> (i, i) Исходный код

numElements :: Ix i => UArray i (Стабильный указатель a) -> Целое Исходный код

unsafeArray :: Ix i => (i, i) -> [(Целое, Стабильный указатель a)] -> UArray i (Стабильный указатель a) Исходный код

unsafeAt :: Ix i => UArray i (Стабильный указатель a) -> Целое -> Стабильный указатель a Исходный код

unsafeReplace :: Ix i => UArray i (Стабильный указатель a) -> [(Целое, Стабильный указатель a)] -> UArray i (Стабильный указатель a) Исходный код

unsafeAccum :: Ix i => (Стабильный указатель a -> e' -> Стабильный указатель a) -> UArray i (Стабильный указатель a) -> [(Целое, e')] -> UArray i (Стабильный указатель a) Исходный код

unsafeAccumArray :: Ix i => (Стабильный указатель a -> e' -> Стабильный указатель a) -> Стабильный указатель a -> (i, i) -> [(Целое, e')] -> UArray i (Стабильный указатель a) Исходный код

module Data.Ix

Неизменяемые ленивые (упакованные) массивы

data Массив i e

Экземпляры
Подробности об экземплярах
IArray Array e Источник
Подробности об экземпляре

Определено в Data.Array.Base

Методы

bounds :: Ix i => Array i e -> (i, i) Источник

numElements :: Ix i => Array i e -> Int Источник

unsafeArray :: Ix i => (i, i) -> [(Int, e)] -> Array i e Источник

unsafeAt :: Ix i => Array i e -> Int -> e Источник

unsafeReplace :: Ix i => Array i e -> [(Int, e)] -> Array i e Источник

unsafeAccum :: Ix i => (e -> e' -> e) -> Array i e -> [(Int, e')] -> Array i e Источник

unsafeAccumArray :: Ix i => (e -> e' -> e) -> e -> (i, i) -> [(Int, e')] -> Array i e Источник

Functor (Array i)
Подробности об экземпляре

Определено в GHC.Internal.Arr

Методы

fmap :: (a -> b) -> Array i a -> Array i b

(<$) :: a -> Array i b -> Array i a

Foldable (Array i)
Подробности об экземпляре

Определено в GHC.Internal.Data.Foldable

Методы

fold :: Monoid m => Array i m -> m

foldMap :: Monoid m => (a -> m) -> Array i a -> m

foldMap' :: Monoid m => (a -> m) -> Array i a -> m

foldr :: (a -> b -> b) -> b -> Array i a -> b

foldr' :: (a -> b -> b) -> b -> Array i a -> b

foldl :: (b -> a -> b) -> b -> Array i a -> b

foldl' :: (b -> a -> b) -> b -> Array i a -> b

foldr1 :: (a -> a -> a) -> Array i a -> a

foldl1 :: (a -> a -> a) -> Array i a -> a

toList :: Array i a -> [a]

null :: Array i a -> Bool

length :: Array i a -> Int

elem :: Eq a => a -> Array i a -> Bool

maximum :: Ord a => Array i a -> a

minimum :: Ord a => Array i a -> a

sum :: Num a => Array i a -> a

product :: Num a => Array i a -> a

Ix i => Traversable (Array i)
Подробности об экземпляре

Определено в GHC.Internal.Data.Traversable

Методы

traverse :: Applicative f => (a -> f b) -> Array i a -> f (Array i b)

sequenceA :: Applicative f => Array i (f a) -> f (Array i a)

mapM :: Monad m => (a -> m b) -> Array i a -> m (Array i b)

sequence :: Monad m => Array i (m a) -> m (Array i a)

(Ix a, Read a, Read b) => Read (Array a b)
Подробности экземпляра

Определено в GHC.Internal.Read

Методы

readsPrec :: Целое -> ReadS (Массив a b)

readList :: ReadS [Массив a b]

readPrec :: ReadPrec (Массив a b)

readListPrec :: ReadPrec [Массив a b]

(Ix a, Show a, Show b) => Show (Массив a b)
Подробности экземпляра

Определено в GHC.Internal.Arr

Методы

showsPrec :: Целое -> Массив a b -> ShowS

show :: Массив a b -> Строка

showList :: [Массив a b] -> ShowS

(Ix i, Eq e) => Eq (Массив i e)
Подробности экземпляра

Определено в GHC.Internal.Arr

Методы

(==) :: Массив i e -> Массив i e -> Булево

(/=) :: Массив i e -> Массив i e -> Булево

(Ix i, Ord e) => Ord (Массив i e)
Подробности экземпляра

Определено в GHC.Internal.Arr

Методы

compare :: Массив i e -> Массив i e -> Порядок

(<) :: Массив i e -> Массив i e -> Булево

(<=) :: Массив i e -> Массив i e -> Булево

(>) :: Массив i e -> Массив i e -> Булево

(>=) :: Массив i e -> Массив i e -> Булево

max :: Массив i e -> Массив i e -> Массив i e

min :: Массив i e -> Массив i e -> Массив i e

Создание массивов

array Источник

Аргументы

:: (IArray a e, Ix i)
=> (i, i)

пределы массива: (минимальный, максимальный)

-> [(i, e)]

список ассоциаций

-> a i e

Создаёт неизменяемый массив по паре пределов и списку начальных ассоциаций.

Пределы задаются как пара минимального и максимального пределов в массиве соответственно. Например, одномерный вектор длиной 10 имеет пределы (1,10), а одномерная 10х10 матрица имеет пределы ((1,1),(10,10)).

Ассоциация — это пара вида (i,x), которая определяет значение массива в индексе i как x. Массив не определён, если какой-либо индекс в списке находится вне пределов. Если в списке две ассоциации имеют одинаковый индекс, значение в этом индексе зависит от реализации. (В GHC используется последнее указанное значение. Другие реализации также будут делать это для необрамленных массивов, но Haskell 98 требует, чтобы для Array значение в таких индексах было неопределённым.)

Поскольку индексы должны быть проверены на эти ошибки, array строго зависит от аргумента пределов и индексов списка ассоциаций. Является ли array строгим или нет, зависит от типа массива: Array — это нестрогий тип массива, но все массивы UArray являются строгими. Таким образом, в нестрогом массиве возможны рекурсии, такие как:

a = array (1,100) ((1,1) : [(i, i * a!(i-1)) | i \<- [2..100]])

Не каждый индекс в пределах массива должен присутствовать в списке ассоциаций, но значения, связанные с индексами, которые не присутствуют, будут неопределёнными.

Если в любом измерении нижний предел больше верхнего предела, то массив допустим, но пуст. Индексирование пустого массива всегда приводит к ошибке границ массива, но bounds всё равно возвращает пределы, с которыми был построен массив.

listArray :: (IArray a e, Ix i) => (i, i) -> [e] -> a i e Источник

Создаёт неизменяемый массив из списка начальных элементов. Список даёт элементы массива в порядке возрастания, начиная с минимального индекса.

accumArray Источник

Аргументы

:: (IArray a e, Ix i)
=> (e -> e' -> e)

Функция накопления

-> e

Значение по умолчанию

-> (i, i)

Пределы массива

-> [(i, e')]

Список ассоциаций

-> a i e

Возвращает: массив

Создаёт неизменяемый массив из списка ассоциаций. В отличие от array, один и тот же индекс может встречаться в списке ассоциаций несколько раз; для объединения значений элементов с одинаковым индексом используется функция накопления.

Например, данный список значений некоторого типа индексов, hist производит гистограмму количества появлений каждого индекса в заданном диапазоне:

hist :: (Ix a, Num b) => (a,a) -> [a] -> Array a b
hist bnds is = accumArray (+) 0 bnds [(i, 1) | i\<-is, inRange bnds i]

genArray :: (IArray a e, Ix i) => (i, i) -> (i -> e) -> a i e Источник

Создаёт неизменяемый массив с помощью функции-генератора.

С момента: array-0.5.6.0

Доступ к массивам

(!) :: (IArray a e, Ix i) => a i e -> i -> e Источник

Возвращает элемент неизменяемого массива по указанному индексу или генерирует исключение, если индекс выходит за пределы границ.

(!?) :: (IArray a e, Ix i) => a i e -> i -> Maybe e Источник

Возвращает Just элемент неизменяемого массива по указанному индексу или Nothing , если индекс выходит за пределы границ.

С момента: array-0.5.6.0

bounds :: (IArray a e, Ix i) => a i e -> (i, i) Источник

Извлекает границы неизменяемого массива.

indices :: (IArray a e, Ix i) => a i e -> [i] Источник

Возвращает список всех допустимых индексов в массиве.

elems :: (IArray a e, Ix i) => a i e -> [e] Источник

Возвращает список всех элементов массива в том же порядке, что и их индексы.

assocs :: (IArray a e, Ix i) => a i e -> [(i, e)] Источник

Возвращает содержимое массива в виде списка ассоциаций.

Склады массивов

foldrArray :: (IArray a e, Ix i) => (e -> b -> b) -> b -> a i e -> b Источник

Ленивая правоассоциативная свертка.

С момента: array-0.5.8.0

foldlArray' :: (IArray a e, Ix i) => (b -> e -> b) -> b -> a i e -> b Источник

Жесткая накапливающая левоассоциативная свертка.

С момента: array-0.5.8.0

foldlArray :: (IArray a e, Ix i) => (b -> e -> b) -> b -> a i e -> b Источник

Ленивая левоассоциативная свертка.

С момента: array-0.5.8.0

foldrArray' :: (IArray a e, Ix i) => (e -> b -> b) -> b -> a i e -> b Источник

Жесткая накапливающая правоассоциативная свертка.

С момента: array-0.5.8.0

traverseArray_ :: (IArray a e, Ix i, Applicative f) => (e -> f b) -> a i e -> f () Источник

Преобразует элементы в аппликативные действия, последовательно их выполняет слева направо и отбрасывает результаты.

С момента: array-0.5.8.0

forArray_ :: (IArray a e, Ix i, Applicative f) => a i e -> (e -> f b) -> f () Источник

forArray_ является traverseArray_ со своими аргументами, поменянными местами.

С момента: array-0.5.8.0

foldlArrayM' :: (IArray a e, Ix i, Monad m) => (b -> e -> m b) -> b -> a i e -> m b Источник

Жесткая накапливающая левоассоциативная монадическая свертка.

С момента: array-0.5.8.0

foldrArrayM' :: (IArray a e, Ix i, Monad m) => (e -> b -> m b) -> b -> a i e -> m b Источник

Жесткая накапливающая правоассоциативная монадическая свертка.

С момента: array-0.5.8.0

Инкрементные обновления массивов

(//) :: (IArray a e, Ix i) => a i e -> [(i, e)] -> a i e Источник

Принимает массив и список пар и возвращает массив, идентичный левому аргументу, за исключением того, что он был обновлен ассоциациями в правом аргументе. Например, если m — матрица 1-происхождения n×n, то m//[((i,i), 0) | i <- [1..n]] — та же матрица, за исключением того, что диагональ обнулена.

Как и в случае с функцией array, если две ассоциации в списке имеют одинаковый индекс, значение в этом индексе зависит от реализации. (В GHC используется последнее заданное значение для этого индекса. Другие реализации также сделают это для массивов без упаковки, но Haskell 98 требует, чтобы для Array значение в таких индексах было bottom.)

Для большинства типов массивов эта операция имеет сложность O(n), где n — размер массива. Однако пакет diffarray предоставляет тип массива, для которого эта операция имеет сложность, линейную по количеству обновлений.

accum :: (IArray a e, Ix i) => (e -> e' -> e) -> a i e -> [(i, e')] -> a i e Источник

accum f принимает массив и список ассоциаций и накапливает пары из списка в массив с помощью функции накопления f. Таким образом, accumArray может быть определен с помощью accum:

accumArray f z b = accum f (array b [(i, z) | i \<- range b])

Производные массивы

amap :: (IArray a e', IArray a e, Ix i) => (e' -> e) -> a i e' -> a i e Источник

Возвращает новый массив, полученный из исходного массива путём применения функции к каждому из элементов.

ixmap :: (IArray a e, Ix i, Ix j) => (i, i) -> (i -> j) -> a j e -> a i e Источник

Возвращает новый массив, полученный из исходного массива путём применения функции к каждому из индексов.

© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.12.1/docs/libraries/array-0.5.8.0-8d84/Data-Array-IArray.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API