Imaginez que je veux mapper une fonction sur un tableau, mais la fonction a un type non seulement de
a -> b code>
mais
a -> int -> b code>
c'est-à-dire que la fonction prend également un index. Comment puis-je faire ça? P>
3 Réponses :
Réponse courte, utilisez Exemple plus long: P> Traverse code>. import qualified Data.Array.Repa as A
import qualified Data.Vector.Unboxed as U
arr1 :: A.Array A.DIM2 Double
arr1 = A.fromVector (A.Z A.:. 2 A.:. 3) $ U.fromList [1::Double,2,3,4,5,6]
arr2 :: A.Array A.DIM2 Double
arr2 = A.traverse arr1 id (\lf i@(A.Z A.:. r A.:. c) ->
(lf i) + (fromIntegral r) + (fromIntegral c))
bonne question, et il n'a pas été documenté dans le Tutoriel Repa , donc je "VE Mise à jour avec Une nouvelle section sur les travers .
in particulier, ce qui signifie que vous pouvez faire des choses comme: p> remplacez toutes les ELLEEMNTS avec leur indice de ligne em> p> traverse code> vous permet: p>
> traverse a id (\f (Z :. i :. j :. k) -> f (Z :. i :. j :. k) * i)
[0,0,0,0,0,0,0,0,0
,10,11,12,13,14,15,16,17,18
,38,40,42,44,46,48,50,52,54]
Utilisez zipwith