Programación funcional
En ciencias de la computación, la programación funcional es un paradigma de programación declarativa basado en la utilización de funciones aritméticas que no maneja datos mutables o de estado. Enfatiza la aplicación de funciones, en contraste con el estilo de programación imperativa, que enfatiza los cambios de estado. La programación funcional tiene sus raices en el cálculo lambda, un sistema formal desarrollado en los 1930s para investigar la definición de función, la aplicación de las funciones y la recursión. Muchos lenguajes de programación funcionales pueden ser vistos como elaboraciones del cálculo lambda.
Decir que no maneja datos mutables, significa que si tu asignas a X un valor (X = 3), mas adelante no puedes cambiar el valor de esta X (osea X = 4, X = “Hola mundo” donde el simbolo de = estaría reasignando un valor, no como comparador).
Clojure
Es un dialecto del lenguaje de programacion Lisp. Es un lenguaje de propósito general que ofrece un estilo de programación interactiva y que incentiva una forma de programar funcional, simplificando así la programación concurrente,
Ventajas de Clojure sobre otros lenguajes
-El codigo en clojure es de 1 a 10 ordenes de magnitud mas pequeño que en java, esto es, de 10 a 100 veces menos codigo.
-Recursión BIEN implementada
-Tiene una repl (Desarrollo dinámico con una consola de evaluación)
-Funciones son objetos de primera clase
-Listas peresozas (podemos tener programados TODOS los números naturales sin ningún problema de memoria)
-Amplio conjunto de Estructuras de datos, vectores, mapas, listas, por mencionar algunos
-Produce codigo de la JVM
-Puedes utilizar Clases de Java para trabajar con Clojure!
Primeros pasos
--Instalación
La forma mas fácil de usar clojure es con leiningen
Descarga e instala este plugin
wget https://raw.github.com/technomancy/leiningen/stable/bin/lein
sudo cp lein /bin (o a cualquier carpeta en tu PATH)
sudo chmod +x /bin/lein
lein repl (para salir de la repl, ctrl + c)
--Notacion
Clojure utiliza notacion Prefija, lo que significa que las expresiones comienzan con el símbolo de la expresion a evaluar y despues van los argumentos, además, todas las expresiones son puestas entre parentesis, por ejemplo
en java System.out.println(“Hola” + “ mundo ” + 3 + “ veces”);
en clojure es (println “Hola” “ mundo” 3 “ veces”)
2 + 3 + 4 + 5 en clojure es (+ 2 3 4 5)
Como puedes ver, esto sirve mucho a la hora de usar funciones con mas de un argumento y facilita la lectura.
--Ejemplos básicos
imprimir los elementos de una lista my-list
(for [i myilist] (println i)) o
(map println my-list)
hacer una lista de los números del 0 al 1999
(range 0 2000)
hacer una lista de números 3, infinita
(repeat 3)
--Tutorial
Puedes encontrar muchas paginas para aprender a programar en clojure, yo recomiendo instalar clojure koans . las instrucciones para instalar y usar el tutorial vienen en su pagina de github, (en ingles)
Mas info
Clojure.org pagina principal de clojure
clojuredocs documentacion y ejemplos de muchas funciones de clojure
clojure hispano grupo de google para clojure en español
clojure mexico
Cualquier duda o comentario, bienvenido sea.