Giter VIP home page Giter VIP logo

programacion-funcional's Introduction

Introducción a la programación funcional

Recurso Link
Presentación 👨‍🏫
Video 📹

Conceptos e ideas Importantes

Paradimas declarativos vs imperativos

Imperativos

Una secuencia de operaciones a realizar. Especificamos la secuencia de operaciones utilizando condicionales o ciclos (if, for, while, etc.)

Algunos lenguajes imperativos:

Python

C++

JavaScript

PHP

Declarativos:

Se especifica el resultado deseado, no cómo lograrlo.

Algunos ejemplos de lenguajes declarativos:

Clojure

Haskell

SQL

Erlang

Los diferentes lenguajes de programación declarativos pueden, a su vez, dividirse en dos paradigmas: lenguajes de programación funcional y lenguajes de programación lógica.

Programación Funcional

La programación funcional es un paradigma de programación en el que tratamos de vincular todo en el estilo de funciones matemáticas puras. Utiliza expresiones en lugar de statements.

Se basa en el cálculo lambda

Cálculo Lambda

Es un sistema formal diseñado para investigar la definición de función, la noción de aplicación de funciones y la recursión. Diseñado por Alonzo Church y Stephen Kleene

Funciones

Definición Matemática: regla que asigna a cada elemento de un primer conjunto un único elemento de un segundo conjunto.

Función

Definición en programación: bloque de código que realiza alguna operación. Toma uno o más argumentos y calcula un resultado.

Ejemplos de funciones en Python

  1. Función que toma un parámetro (name) y regresa un mensaje "Hello Daniel", por ejemplo.
def hello(name:str)->str:
    return "Hello, "+name
  1. Función que suma dos números
def add(n1:int, n2:int)->int:
    return n1+n2
  1. Función que suma los valores de un array o lista:
def add_array(array:List[int])->int:
    total:int=0
    for element in array:
        total+=element

Pasemos a un lenguaje diferente, veamos las funciones anteriores en Haskell:

  1. Función que regresa un mensaje de Hello y un nombre que pase:
hello name = "Hello, "++name
  1. Función que suma dos números
add n1 n2 = n1+n2
  1. Función que suma los valores de un array o lista:
Con Prelude
sum [1..5] -> [1, 2, 3, 4, 5]
sum myLista

Recursividad
sumList :: (Num a) => [a] -> a
sumList [] = 0
sumList (x:xs) = x + sum' (xs)

Funciones Puras

P:

Siempre devuelve el mismo resultado para los mismos valores de argumento y no tiene efectos secundarios como modificar un argumento (o variable global).

Q:

Facilidad de escritura para aplicaciones paralelas/concurrentes

p -> q

Reduction

Mecanismo para ejecutar programas funcionales. Proceso de convertir una expresión a una forma más simple. Ejemplo:

3+(5*(8-2))
-->Reduction
3+(5*6)
-->Reduction
3+30
-->
33
(3+4)*(15-9)
-->Reduction
7*(15-9)             | (3+4)*6
-->
7*6                  | 7*6
-->
42

Redex (Reducible expression)

Una expresión que coincide con el lado izquierdo de alguna regla de reducción o definición. Es cualquier expresión cuya evaluación requiere que se realice un trabajo.

Teorema de Church-Rosser:

Establece que, al aplicar las reglas de reducción a los términos , el orden en el que se eligen las reducciones no hace una diferencia en el resultado final.

Diferentes expresiones pueden ser evaluadas en paralelo, sin afectar el resultado.

Expresiones

Algunos dicen que:

Functional programming is programming with expressions.

Porque en todo usamos expresiones, una expresión es una serie de operaciones que dan como resultado un solo valor. 2+2 es una expresión que se evalúa al valor 4. Estad pueden contener llamadas a funciones.

Ecuaciones

Es tan simple definir su utilidad como:

Da nombre a valores Lado izquierdo = lado derecho

Espera, esto me suena a una variable, como en otros lenguajes, ¿es eso?

Nooooo...., en programación funcional no existen las variables

La reasignación no está permitida

Es más como una contante, una vez dado el valor a un nombre, no puedes cambiarlo nunca.

Funciones anónimas (lambdas)

Las funciones que no tienen nombre, son las funciones anónimas, también llamadas lambdas, muy útiles en Haskell, incluso probablemente las has utilizado con otros lenguajes, con el común map o filter:

numbers = [1, 2, 3, 4, 5]
result = map(lambda x: x*x, numbers)
map (\x -> x*x) [1..5]

RECURSOS PARA APRENDER PROGRAMACIÓN FUNCIONAL

Cursos

Desafíos

programacion-funcional's People

Contributors

daniel692a avatar

Stargazers

Pedro Villar avatar Manuel Ortiz avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.