Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Programación funcional en Elixir

pf_en_elixir.livemd

Programación funcional en Elixir

import Enum, only: [sum: 1]

Programación funcional

Simplicidad

  • Datos y funciones.
  • Las funciones toman datos y devuelven datos
  • ¡Las funciones también son datos!

¿Qué es un programa funcional?

  • Un conjunto de definiciones de funciones
  • Las funciones se definen usando composición de funciones
div(sum([5,6,9,3,8]), length([5,6,9,3,8]))

Datos (en Elixir)

Los datos en los lenguajes funcionales hay que entenderlos como construcciones sintácticas, como si siguienran una gramática

Básicos: átomos (su valor es su nombre), enteros (largos), float, strings

:nil
18_446_744_073_709_551_616
3.141592653589793
"Don't panic"
<<69,0,0,60,28,70,64,0,64,6,177,230,192,168,0,1,192,168,0,199,222,173,190,239,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0>>
<<195,129,110,103,101,108>>

Complejos: tuplas, listas, maps

{}
{:ok, 42}
{1, "dos", "III"}
[:ok, 42]

Elementos de la programación funcional

  • Recursividad
  • Encaje de patrones
  • Transparencia referencia e inmutabilidad
  • Orden superior

¿Qué no tenemos?

  • No hay asignación
  • No hay secuencias de instrucciones (statements)
  • No hay bloques
  • No hay variables de memoria
  • No hay punteros
  • ¡No hay estado!

Recursividad

Encaje de patrones (pattern matching)

<> = <<69,0,0,60,28,70,64,0,64,6,177,230,192,168,0,1,192,168,0,199,222,173,190,239,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0>>
{ver, typ, len}

Inmutabilidad

Section

Orden superior

Modelo de computación: reducción