Доступ к элементу массива Haskell (матрица) - PullRequest
3 голосов
/ 09 мая 2011

В настоящее время я нахожусь в проекте, который будет нуждаться в доступе к элементам Array-Matrix в Haskell.Итак, я попытался поискать его в Google, искать везде.

Функция должна быть такой:

getElementIndex :: Int -> Array (Int,Int) Int -> (Int,Int)

И это должно вернуть Iи J индексы элемента в матрице.

Ответы [ 3 ]

6 голосов
/ 09 мая 2011

Чтобы считывать элементы из типов Array в Haskell, вы используете оператор (!), например:

Prelude Data.Array> let v = listArray (0,9) [1..10]
Prelude Data.Array> v ! 3
4

, поэтому теперь все, что вам нужно сделать, - это пройти по индексному пространству, строкам иколонны.Мне нравятся списки для такого рода задач:

assocs' x y arr = [ ((i,j), arr ! (i,j))
                  | i <- [0..x-1]
                  , j <- [0..y-1]
                  ]

, которая является просто специализированной версией Data.Array.assocs:

assocs :: Ix i => Array i e -> [(i, e)]

, которая возвращает ленивый список индексов и элементов.Итак, позвоните assocs, а затем возьмите первый соответствующий элемент.

4 голосов
/ 09 мая 2011

Как насчет

\x -> map fst . filter ((==x) . snd) . assocs
0 голосов
/ 12 декабря 2011

Простые матрицы в исключении http://www.haskell.org/haskellwiki/Prelude_extensions#Matrices

...