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.