/ / Limpiar la composición de permutación en Haskell - haskell

Limpiar la composición de permutación en Haskell - haskell

¿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 № 1

Si 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.