1. ¿Qué es?
    1. Es un paradigma de programación
    2. Enfoca la solución del problema en la combinación de funciones sin estado, obtienen un resultado únicamente a partir de los parámetros.
    3. Muchos lenguajes ofrecen alguna porción del paradigma funcional
      1. Puros: Haskell, LISP
      2. Híbridos: Java, Python, C#, Javascript
  2. Variables tipo función
    1. ¿Qué se guarda en una variable?
      1. Programación estructurada
        1. precio
      2. Programación orientada a objetos
        1. articulo1
      3. Programación funcional
        1. promedio
    2. Una variable que guarde una referencia a una función puede ser ejecutada
      1. imprimir = print imprimir("Hola")
  3. Funciones de orden superior
    1. Recibe parámetros de tipo función
    2. Retorna valores de tipo función
  4. Funciones lambda
    1. Es una función anónima de una única línea
    2. No se programa con def
    3. Puede ser almacenada en una variable
    4. Puede ser redactada como un parámetro actual de una función de orden superior
    5. Ejemplos
      1. cuadrado = lambda x: x*x print(cuadrado(12))
      2. es_par = lambda n: n % 2 == 0 if es_par(sorteo):
  5. Operaciones funcionales con secuencias
    1. filter
      1. Recibe una función con un parámetro y que devuelva boolean
      2. Por cada elemento de la secuencia ejecuta la función parámetro
      3. Retorna una secuencia nueva que incluye los valores para los que la función retornó verdadero
      4. pares = filter(es_par, numeros) pares = filter(lambda x: x % 2 == 0, numeros)
    2. map
      1. Recibe una función con un parámetro y que devuelve un valor de cualquier tipo
      2. Por cada elemento de la secuencia ejecuta la función parámetro
      3. Retorna una secuencia nueva que contiene los valores retornados por cada ejecución de la función parámetro
      4. cuadrados = map(cuadrado, numeros)
    3. reduce
      1. Realiza una reducción o pliegue de una secuencia
      2. Recibe una función de dos parámetros y un retorno del mismo tipo
      3. Ejecuta la función parámetro con cada valor de la secuencia y el retorno de la ejecución anterior
      4. Para ejecutarla debe importarse del módulo functools
      5. suma = reduce(lambda x,y: x + y, numeros)