¿Cuál es una forma limpia de componer dos permutaciones dadas como listas de enteros en Haskell?
Lo sé A !! i
es el operador de acceso a matriz infijo como el equivalente de C ++ A[i]
, pero estoy atascado en cuanto a cómo mapearlo. En C ++, harías un loop sobre i C[i] = A[B[i]]
.
Respuestas
7 para la respuesta № 1Si prefieres en cambio almacenarlas en Data.Vector
o Data.Vector.Unboxed
desde el vector
paquete, puede utilizar el backpermute
combinator directamente.
Entonces lo que quieres es solo backpermute a b
, y sus permutaciones se pueden almacenar sin empaquetar y empaquetar juntas en la memoria, reduciendo también su huella de memoria.
1 para la respuesta № 2
El equivalente de Haskell de ese bucle en C ++ sería algo como esto:
c = map (a !!) b
Para que puedas decir
compose = map . (!!)
y escribe
c = compose a b
Pero !!
es para listas, no para matrices, y la indexación no es particularmente eficiente. Es posible que desee considerar utilizar un Vector
.