#include "head.html"

Arrays in Haskell

Arrays sind nicht eigentlich im Sprachkern, weil wir kein destruktives Update haben, und oft andere Strukturen (FiniteMap, siehe unten) besser passen. Aber wer unbedingt will ... es gibt ein standardisiertes Modul Array (offizielle Definition) mit diesem Interface
module  Array ( 
         module Ix,  -- export all of Ix for convenience
         Array, array, listArray, (!), bounds, indices, elems, assocs, 
         accumArray, (//), accum, ixmap ) where

 import Ix

 infixl 9  !, //

 data  (Ix a)    => Array a b = ... -- Abstract

 array           :: (Ix a) => (a,a) -> [(a,b)] -> Array a b
 listArray       :: (Ix a) => (a,a) -> [b] -> Array a b
 (!)             :: (Ix a) => Array a b -> a -> b
 bounds          :: (Ix a) => Array a b -> (a,a)
 indices         :: (Ix a) => Array a b -> [a]
 elems           :: (Ix a) => Array a b -> [b]
 assocs          :: (Ix a) => Array a b -> [(a,b)]
 accumArray      :: (Ix a) => (b -> c -> b) -> b -> (a,a) -> [(a,c)]
                              -> Array a b
 (//)            :: (Ix a) => Array a b -> [(a,b)] -> Array a b
 accum           :: (Ix a) => (b -> c -> b) -> Array a b -> [(a,c)]
                              -> Array a b
 ixmap           :: (Ix a, Ix b) => (a,a) -> (a -> b) -> Array b c
                              -> Array a c
Ein update in einem solchen Array gibt es nicht. Man kann mit diesen Arrays nur komplett rechnen. Das ist durchaus bei einigen Matrizenoperationen sinnvoll.

Braucht man updates, muß man in eine Zustandsmonande gehen, siehe mutable arrays im GHC-Report.

Mengen

#include "foot.html"