2017-09-25 4 views
0

Je ne comprends pas les tableaux haskell.Impossible de comprendre les tableaux haskell

Par exemple je veux créer et stocker un tableau dans la variable bsd mais ce qui se passe dans .... si je veux un tableau de taille par exemple 10 et de type Bool.

bsd :: Array Int Bool --is this correct? 
bsd = .... --what comes here? 

S'il vous plaît aidez-moi à comprendre ...

et si je veux changer une valeur bsd à par exemple index 5 quelle est la syntaxe

et comment puis-je accéder à un index dans bsd ??

s'il vous plaît aider

+1

Un 'Array' est une valeur pure. Vous ne pouvez pas le changer. Il y a des opérations pour créer de nouveaux tableaux représentant des modifications des anciens, mais ceux-ci sont trop lents pour les tableaux non-petits. Si vos tableaux n'ont réellement qu'une dizaine d'éléments, alors c'est très bien, mais sinon vous pourriez vouloir utiliser des tableaux mutables ou des séquences pures. – dfeuer

Répondre

2

En utilisant https://hackage.haskell.org/package/array-0.5.2.0/docs/Data-Array-IArray.html

Ceci construit un tableau de bools à partir d'une liste. Il y a des tonnes d'autres options et fonctions à utiliser aussi

import Data.Array.IArray 
let bsd = listArray (0, 3) [False, True, True, False] :: Array Int Bool 
elems bsd -- [False,True,True,False] 
bsd -- array (0,3) [(0,False),(1,True),(2,True),(3,False)] 
bsd ! 0 -- Get element at index 0, which is False 
-- Create new array with element 0 changed to True. 
let bsd2 = bsd // [(0, True)] 
bsd2 -- array (0,3) [(0,True),(1,True),(2,True),(3,False)] 
+0

comment puis-je dire obtenir la taille de bsd? et comment puis-je attribuer à dire index 2? – Jhoy

+0

@Jhoy 'bsd // [(2, False)]' à affecter à l'index 2? –

+0

Pour la taille que vous pourriez faire 'indices bsd' qui renvoie la liste des indices et ensuite prendre la longueur de cette liste (peut-être il y a une meilleure façon, je ne sais pas). –