2017-09-25 5 views
0

Ich kann Haskell-Arrays nicht verstehen.Ich kann Haskell-Arrays nicht verstehen

Zum Beispiel möchte ich ein Array in Variable bsd erstellen und speichern, aber was geht in ...., wenn ich ein Array der Größe zB 10 und des Typs Bool wollen.

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

Bitte helfen Sie mir zu verstehen ...

und was ist, wenn ich will, beispielsweise bei einem Wert in bsd ändern Index 5 Wie lautet die Syntax

und wie kann ich auf einen Index zugreifen in bsd ??

bitte helfen

+1

Ein 'Array' ist ein reiner Wert. Du kannst es nicht ändern. Es gibt Operationen zum Erstellen neuer Arrays, die Modifikationen von alten darstellen, aber diese sind für nicht-kleine Arrays zu langsam. Wenn Ihre Arrays wirklich nur etwa zehn Elemente haben, ist das wahrscheinlich in Ordnung, aber ansonsten könnten Sie veränderbare Arrays oder reine Sequenzen verwenden. – dfeuer

Antwort

2

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

Dies konstruiert eine Reihe von bools aus einer Liste. Es gibt Tonnen von anderen Optionen und Funktionen zu verwenden, auch

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

wie kann ich sagen, die größe von bsd bekommen? und wie kann ich zuweisen, um Index 2 zu sagen? – Jhoy

+0

@Jhoy 'bsd // [(2, False)]' bei Index 2 zuzuordnen? –

+0

Für die Größe könnten Sie 'Indizes bsd' machen, die die Liste der Indizes zurückgibt und dann die Länge dieser Liste nimmt (vielleicht gibt es einen besseren Weg, ich weiß es nicht). –