2010-03-06 12 views
13

¿Alguno de los populares lenguajes funcionales actuales tiene un buen soporte para la memoria & si tuviera que elegir uno por la fuerza de su memorización que recomendaría & por qué?Idiomas funcionales y soporte para la memoria

Actualización: Estoy buscando optimizar un gráfico dirigido (donde los nodos podrían ser funciones o datos). Cuando se actualiza un nodo en el gráfico, me gustaría que los valores de otros nodos se vuelvan a calcular solo si dependen del nodo que cambió.

Update2: requiere lenguaje/tiempo de ejecución libre o de código abierto.

+1

Interesante y relevante http://stackoverflow.com/questions/1932968/why-memoization-is-not-a-language-feature – Joel

+0

¿Quieres Excel? – nicolas

Respuesta

7

Para Haskell, Conal Elliott ha publicado una hermosa entrada de blog en functional memo tries. El trabajo es extraordinariamente inteligente y bastante profundo, y Conal luego lo extendió al polymorphic functions. No importa qué idioma use, esto es muy recomendable, ya que descubre las ideas profundas memoria subyacente en los idiomas funcionales.

Sin embargo, mirando su actualización, no está claro que la memorización sea realmente lo que desea. Su enunciado de problema expandido (propagando actualizaciones a través de un gráfico dirigido) es un ejemplo casi de libro de texto de cómputo incremental, en el cual Bob Harper y Umut Acar han realizado una gran cantidad de trabajo. Creo que tienen una biblioteca gratuita escrita en ML estándar. Mira la página de Umut en self-adjusting computation.

+0

@Norman - Gracias por los enlaces interesantes y acordé, mientras hacía las actualizaciones, y después de haberlo pensado un poco más, me di cuenta de que la memorización probablemente no era la solución ... pero todavía estoy interesado en saber qué tan profundo es el soporte para la memorización puede ir – Joel

+0

Siguiendo el enlace de cálculo autoajustable que incluyó anteriormente, se obtuvo http://ttic.uchicago.edu/~umut/papers/toplas06.html que parece ser exactamente lo que quiero: un "lenguaje funcional adaptable" .... "un lenguaje funcional call-by-value extendido con primitivas de adaptabilidad". .... "A medida que se ejecuta un programa adaptativo, el sistema subyacente representa las dependencias de datos y control en la ejecución en forma de un gráfico de dependencia dinámica. Cuando la entrada al programa cambia, un algoritmo de propagación de cambios actualiza la salida y la dinámica gráfico de dependencia mediante la propagación de cambios " – Joel

+0

Para un enfoque más elegante de la memoria polimórfica (utilizando propiedades profundas y elegantes en lugar de magia operativa), consulte la publicación * [Memorizar funciones polimórficas mediante la conmemoración] (http://conal.net/blog/posts/memoizing-polymorphic-functions-via-unmemoization) *, que consiste principalmente en mis reflexiones sobre la publicación de Dan Piponi * [Memoizing Polymorphic Functions with High School Algebra and Quantifiers] (http://blog.sigfpe.com/2009/11/ memoizing-polymorphic-functions-with.html) *. – Conal

4

En Haskell, vea this para empezar.

Para Lisp, this fue el primer golpe de Google que pareció relevante.

Para F # this podría ser un buen lugar para comenzar.

Ahora que terminé de buscar en Google para usted. ¿Es alguno de estos buenos soportes? Usted decide :-)

Oh, recomendaría Mathematica, pero entiendo que mucha gente se desanime por su precio. Estrictamente hablando, es más un sistema de reescritura de términos que un sistema de programación funcional, y no es puro en ningún sentido de la palabra. Pero sí lo hace memoization.

EDIT: Olvidé Erlang, que tiene mucha tracción en este momento - No sé cómo pero espero que pueda hacer memoizations.

3

Sí, no quiere ninguna memoria en absoluto, quiere un seguimiento de dependencia preciso. Se podría utilizar la biblioteca Gráfico funcional Haskell (FGL) para crear ur grafo dirigido, a continuación, utilizar la función sucesor saber con precisión qué nodos para actualizar: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/fgl

Este documento será de gran ayuda ind la comprensión de los documentos: http://web.engr.oregonstate.edu/~erwig/fgl/

La función sucesor sea nombrado suc, en Data.Graph.Inductive.Graph módulo

El ir en una dirección diferente, un lenguaje funcional popular que apoya esto es Excel. :)

+0

Gracias por los consejos. – Joel

Cuestiones relacionadas