Lenguajes Funcionales

De Codepixel

Contenido

[editar] Conceptos Básicos

Los evaluadores de nodos son, en cierta medida, lenguajes funcionales. Es importante conocer los conceptos e implementaciones de este tipo de lenguajes, para poder evaluar nodos de forma eficiente.

  • Estrategia : muchas son las preguntas y optimizaciones que se pueden implementar usando la experiencia de lenguajes funcionales. En este artículo , nos comentan métodos para evaluar un árbol de nodos, visto como un lenguaje funcional.
  • Implementing Functional Languages: a tutorial
  • Closure : encapsula una función con sus parámetros.
  • funciones lambda : en la wikipedia.
  • Memoization : una función recuerda su evaluación para que no se evalúe varias veces.


[editar] Lambda Calculus

Una expresión lambda puede ser:

- variable o constante

- abstracción ( f(x) = x^2 + k )

- aplicacion ( (x^2)7 = 7^2 )

Las variables que no son entradas de la función, se denominan "free variables". Por ejemplo f(x) = x^2+k , k es una variable libre.

- sustitución : sustituye variables libres por expresiones , por ejemplo, {x/k}P sustituye x por cada ocurrencia de la variable libre k en la función P.

[editar] Operaciones Básicas

  • Map : aplica una función a todos los elementos de una lista.
  • Fold : concatena llamadas en una lista, reduciendola a un solo valor.
  • Compose : aplicar una función a otra función.
  • Filter : eliminar valores de una lista aplicando una función.
  • Zip : conbina varias listas, en una sola lista de tuplas (ejemplo).
  • map flod filter en haskell.

[editar] Monads

Los lenguajes funcionales sufren de "side effects", esto es, que el resultado no es 100% independiente. Sumar 3+5 siempre devolverá el mismo valor, llame donde se llame, pero la funcion leer un fichero, depende del contenido del fichero. Escribir en un fichero es algo que tiene que ser secuencial tambíen.

[editar] Spineless Tagless G-Machine

Es una máquina que permite evaluar nodos de forma "lazy", muy popular entre los compiladores de lenguajes puramente funcionales (especialmente haskell).

Herramientas personales