¿Producto de matriz funcional pura y razonablemente eficiente en Haskell?

Conozco un poco a Haskell, y me pregunto si es posible escribir algo como un producto de matriz-matriz en Haskell que sea todo lo siguiente:

Puro funcional: noIO oState mónadas en su tipo de firma (no me importa lo que suceda en el cuerpo de la función).Es decir, no me importa si el cuerpo de la función usa mónadas, siempre que toda la función sea pura.). Tal vez quiera usar este producto matriz-matriz en una función pura.Memoria segura: sin malloc ni punteros. Sé que es posible "escribir C" en Haskell, pero se pierde la seguridad de la memoria. En realidad, escribir este código en C e interconectarlo con Haskell también pierde la seguridad de la memoria.Tan eficiente como, digamos, Java. Para concretar, supongamos que estoy hablando de un diseño simple de columna contigua, triple bucle, precisión simple, contiguo (float[]nofloat[][]) y matrices de tamaño 1000x1000, y una CPU de un solo núcleo. (Si está obteniendo operaciones de punto flotante de 0.5-2 por ciclo, probablemente esté en el estadio de béisbol).

(No quiero que esto suene como un desafío, pero tenga en cuenta que Java puede satisfacertodos de los anteriores fácilmente.)

eso ya lo se

La implementación de triple bucle no es la más eficiente.. Es bastante caché ajeno. Es mejor usar un bien escrito.BLAS Implementación en este caso particular. Sin embargo, no siempre se puede contar con una biblioteca de C disponible para lo que se intenta hacer. Me pregunto si un código razonablemente eficiente puede escribirse en Haskell normal.Algunas personas escribieron artículos de investigación completos que demuestran # 3. Sin embargo, no soy un investigador de ciencias de la computación. Me pregunto si es posible mantener las cosas simples simples en Haskell.La gentil introducción a Haskell tiene una implementación de producto matricial.. Sin embargo, no satisfaría los requisitos anteriores.

Dirigiendo comentarios:

Tengo tres razones: primero, el requisito de "no malloc o punteros" todavía no está bien definido (lo desafío a que escriba cualquier fragmento de código Haskell que no use punteros);

Vi un montón de programas de Haskell que no usabanPtr. ¿Quizás se refiere al hecho de que, en el nivel de instrucción de la máquina, se usarán los punteros? Eso no es lo que quise decir. Me refería al nivel de abstracción del código fuente de Haskell.

en segundo lugar, el ataque a la investigación de CS está fuera de lugar (y, además, no puedo imaginar nada más simple que usar el código que alguien más ha escrito para ti); tercero, hay muchos paquetes de matriz en Hackage (y el trabajo de preparación para hacer esta pregunta debe incluir revisar y rechazar cada uno).

Parece que su # 2 y # 3 son los mismos ("usar bibliotecas existentes"). Me interesa el producto matricial como una prueba simple de lo que Haskell puede hacer por sí mismo y si le permite "mantener las cosas simples simples". Podría fácilmente haber encontrado un problema numérico que no tenga bibliotecas listas, pero luego tendría que explicar el problema, mientras que todos ya saben qué es un producto de matriz.

¿Cómo puede Java satisfacer 1.? Cualquier método de Java es esencialmente:: IORef Arg -> ... -> IORef This -> IO Ret

Esto va a la raíz de mi pregunta, en realidad (+1). Si bien Java no pretende seguir la pureza, Haskell sí. En Java, si la función es pura o no se indica en los comentarios. Puedo afirmar que el producto de la matriz es puro, aunque hago mutación en el cuerpo de la función.La pregunta es si el enfoque de Haskell (pureza codificada en el sistema de tipos) es compatible con la eficiencia, la seguridad de la memoria y la simplicidad.

Respuestas a la pregunta(3)

Su respuesta a la pregunta