Cursos‎ > ‎Cursadas Anteriores‎ > ‎2010‎ > ‎Jueves Mañana‎ > ‎Funcional‎ > ‎

Paradigma Funcional - Clase 2

Aplicación Parcial

Motivación
  • Muchas veces, al componer funciones nos encontramos ante la dificultad de que las funciones de las que disponemos no se pueden componer directamente, por ejemplo cuando las funciones tienen más de un parámetro: sólo podemos componer funciones de un parámetro.

  • Para mitigar este problema, el paradigma funcional nos provee de un mecanismo para construir una función de un solo parámetro a partir de una función con más parámetros, este mecanismo se denomina aplicación parcial: dada una función que acepta varios parámetros, nosotros podemos aplicarle tantos como querramos y así obtener una función con menos parámetros.

  • Podemos imaginar que queremos definir la función impar, un número es impar si no es divisible por 2. Si quisieramos usar composición no podríamos usar la función esDivisiblePor que definimos antes, porque esta recibe dos parámetros.

    Para poder aprovecharla nos veríamos obligados a hacer una función auxiliar, por ejemplo:
    esPar x = esDivisiblePor 2 x
    esImpar = not . esPar

  • Si bien esta estrategia funciona, nos obliga a definir la función esPar. Podría haber casos en los que no quisiéramos escribir esa función. Para evitarlo, podemos recurrir a la aplicación parcial, para construir la función que necesitamos:
    esImpar = not . esDivisiblePor 2
Pasando en limpio, un poco de teoría
  • ¿Qué es eso de esDivisiblePor 2?
    Al aplicarle a una función menos parámetros de los que en realidad necesita para producir un valor, lo que obtenemos es otra función, que recibe naturalmente un parámetro menos que la primera.

  • Con esta nueva función podemos naturalmente hacer todo lo que hacíamos antes con funciones, por ejemplo:
    • Aplicarle parámetros:
      (esDivisiblePor 2) 8

    • Componerla con otra:
      not . esDivisiblePor 2

    • Pasarla por parámetro:
      ambasCumplen (esDivisiblePor 2)

    • Usarla como definición de una función:
      esPar = esDivisiblePor 2

  • También podemos aplicar parcialmente los operadores:
    doble = (2*)
    mitad = (/2)

    Para poder hacer esto hay que poner entre paréntesis la aplicación parcial.
Resumen
  • Es lo mismo doble 2 que (2*) 2
  • Si lo uso muchas veces me conviene ponerle nombre, si lo voy a usar una vez sola me conviene usarlo así.
  • Definir doble en lugar de doble x nos pone a hablar de funciones y no de valores, ahí comienza a verse el poder de la programación funcional.
Ejercitacion
  • Siguiente (hacerlo también usando la suma, hablar de aplicación y cantidad de parámetros).
  • Inverso
  • 2x+3 (mostrar composición)
  • es par (ojo, necesita flip)
  • sumar vectores (mostrar pattern matching)
  • es vacia
  • Desafío: esMultiplo con composición.
Comments