2009-11-16 10 views
4

Mon problème est que j'ai besoin d'itérer sur tableau et calculer une valeur dépend de chaque élément. Je cherchais une fonction de type pli pour les tableaux, mais la bibliothèque standard semble être très inutile avec les tableaux. Ou il me manque quelque chose?Itérer sur des tableaux en haskell

L'autre solution peut être un tableau de 'liaison' à une liste. La liaison signifie que je ne veux pas copier ce tableau. Est-ce possible?

Btw, c'est tout à propos de Array.

Répondre

9

Je viens donc arrivé à courir à travers cet article l'autre jour: Folding Arrays

+2

Merci. Je me demande juste pourquoi de telles fonctions ne sont pas dans Data.Array? – qba

+0

iirc, il a été décidé que, puisque les tableaux peuvent être multidimensionnels, une fonction de pli générale n'avait pas beaucoup de sens. Si vous avez remarqué, cet article ne couvre que quelques façons de plier les tableaux unidimensionnels –

+4

En fait, ils sont! mais seulement sous la forme d'une instance pour Data.Foldable.Foldable. Ils n'existent pas avec leurs propres noms car cela ne ferait qu'encombrer l'espace de noms. En cas de doute, vérifiez quelles classes ont des instances pour le type de données que vous utilisez. –

8

Jetez un oeil à Data.Foldable. Il définit une classe de type qui fait exactement ce que vous voulez.

1

Quel type de type de tableau utilisez-vous? Vous pouvez peut-être simplement plierM sur l'espace d'index.

Ou utilisez une des bibliothèques de tableaux qui prennent directement en charge les plis (uvector).

2

En utilisant Data.Foldable vous pouvez foldr/foldl et Array comme vous le pouvez pour une liste.

Une autre option est que vous pouvez convertir le Array de nouveau dans une liste avec elems, puis foldr ou foldl sur la liste.

+0

Malheureusement, ce tableau est assez grand, donc cela prend trop de temps pour utiliser elems. – qba