SlideShare una empresa de Scribd logo
Clojure
              Java y Lisp, unidos


        Alejandro Serrano Mena
alejandro.serranom@estudiante.uam.es


        Ciclo de Lenguajes Funcionales
Marzo-Mayo 2010, Escuela Polit´cnica Superior, UAM
                              e
¿Qu´ es Clojure?
   e               El lenguaje   Secuencias   Macros   Memoria Software Transaccional (STM)   Integraci´n con Java
                                                                                                       o




Contenido

       1   ¿Qu´ es Clojure?
              e
       2   El lenguaje
             El REPL
             Primeras “escapadas” a Java
       3   Secuencias
             Trabajo con funciones
             Consultando un map
             Evaluaci´n vaga
                      o
       4   Macros
       5   Memoria Software Transaccional (STM)
       6   Integraci´n con Java
                    o
¿Qu´ es Clojure?
   e               El lenguaje   Secuencias   Macros   Memoria Software Transaccional (STM)   Integraci´n con Java
                                                                                                       o




Un primer acercamiento




       Un dialecto moderno de Lisp que
        corre bajo la plataforma Java, con
       un ojo puesto en la concurrencia
¿Qu´ es Clojure?
   e               El lenguaje   Secuencias   Macros   Memoria Software Transaccional (STM)   Integraci´n con Java
                                                                                                       o




Algunas caracter´
                ısticas de Lisp

              Sintaxis casi inexistente, basada en par´ntesis
                                                      e
       (defun ejemplo (t)
           (cond
               ((> t 3) (print ‘‘Hola’’))
                   (t (print ‘‘Adios’’))))

              Clojure la limpia bastante
                     Evitando en muchos casos los par´ntesis
                                                      e
                     Introduciendo otros s´
                                          ımbolos visualmente distintos

       (defn ejemplo [t]
           (cond
               (> t 3) (print ‘‘Hola’’)
                   :else (print ‘‘Adios’’)))
¿Qu´ es Clojure?
   e               El lenguaje   Secuencias   Macros   Memoria Software Transaccional (STM)   Integraci´n con Java
                                                                                                       o




Algunas caracter´
                ısticas de Lisp




              La lista es la unidad b´sica de funcionamiento
                                     a
                     De hecho, la celda cons
              En Clojure se cambia por la secuencia, que es una interfaz
              gen´rica para listas, conjuntos, vectores. . .
                 e
¿Qu´ es Clojure?
   e               El lenguaje   Secuencias   Macros   Memoria Software Transaccional (STM)    Integraci´n con Java
                                                                                                        o




Algunas caracter´
                ısticas de Lisp




              Es   homoic´nico
                         o
                     Datos y programas se describen del mismo modo
                     Permite escribir macros, es decir, extender el                           lenguaje
                     de forma sencilla
¿Qu´ es Clojure?
   e               El lenguaje   Secuencias   Macros   Memoria Software Transaccional (STM)   Integraci´n con Java
                                                                                                       o




Clojure y Java


       Clojure corre en la misma m´quina virtual que Java
                                  a
              Podemos usar todas las clases que nos ofrece la librer´ est´ndar
                                                                    ıa a
              de Java, y todas aquellas a las que estemos acostumbrado de
              nuestro trabajo con ese lenguaje
              La mayor parte de las herramientas (JUnit, Ant. . . ) tambi´n
                                                                         e
              sirven para Clojure
              Tambi´n podemos crear nuevos elementos que se puedan usar
                    e
              dentro de c´digo Java
                         o
              En general, los proyectos tendr´n una parte en Java y otra en
                                             a
              Clojure, us´ndose cada lenguaje all´ donde sea m´s util
                         a                       ı            a ´
¿Qu´ es Clojure?
   e               El lenguaje   Secuencias   Macros   Memoria Software Transaccional (STM)   Integraci´n con Java
                                                                                                       o




Programaci´n funcional
          o



       Clojure est´ pensado para ser usado funcionalmente (aunque
                  a
       tambi´n puede usarse de forma estructurada ´ OO)
             e                                     o
              Permite pasar funciones como argumentos y tenerlas como valor
              de retorno
              Usa estructuras de datos inmutables
                     En vez de usar funciones que cambien el estado de un objeto,
                     tendremos funciones que crean nuevos datos a partir de otros
                     Permiten una mejor aproximaci´n a la concurrencia, como ve-
                                                   o
                     remos en la parte de STM
¿Qu´ es Clojure?
   e               El lenguaje   Secuencias   Macros   Memoria Software Transaccional (STM)   Integraci´n con Java
                                                                                                       o




Contenido

       1   ¿Qu´ es Clojure?
              e
       2   El lenguaje
             El REPL
             Primeras “escapadas” a Java
       3   Secuencias
             Trabajo con funciones
             Consultando un map
             Evaluaci´n vaga
                      o
       4   Macros
       5   Memoria Software Transaccional (STM)
       6   Integraci´n con Java
                    o
¿Qu´ es Clojure?
   e                El lenguaje   Secuencias   Macros   Memoria Software Transaccional (STM)   Integraci´n con Java
                                                                                                        o

Primeras “escapadas” a Java


Traducci´n Java-Clojure
        o



         Java                                             Clojure
         import ns.Clase1                                 (import ’(ns Clase Clase2))
         import ns.Clase2
         new Clase(arg1, arg2...)                         (Clase. arg1 arg2 ...)
                                                          (new Clase arg1 arg2 ...)
         obj.metodo(arg1, arg2, ...)                      (metodo. obj arg1 arg2 ...)
                                                          (. obj metodo arg1 arg2 ...)
         Clase.estatico(arg1, arg2, ...)                  (Clase/estatico arg1 arg2 ...)
         obj.metodo1().metodo2().metodo3()                (.. obj metodo1 metodo2 metodo3)
¿Qu´ es Clojure?
   e               El lenguaje   Secuencias   Macros   Memoria Software Transaccional (STM)   Integraci´n con Java
                                                                                                       o




Contenido

       1   ¿Qu´ es Clojure?
              e
       2   El lenguaje
             El REPL
             Primeras “escapadas” a Java
       3   Secuencias
             Trabajo con funciones
             Consultando un map
             Evaluaci´n vaga
                      o
       4   Macros
       5   Memoria Software Transaccional (STM)
       6   Integraci´n con Java
                    o
¿Qu´ es Clojure?
   e                El lenguaje    Secuencias   Macros   Memoria Software Transaccional (STM)   Integraci´n con Java
                                                                                                         o

Trabajo con funciones


Tipos de secuencias



                                  Sintaxis                       Constructores
         Lista                    ( e1 e2 e3 )                   (list e1 e2 e3)
         Vector                   [ e1 e2 e3 ]                   (vector e1 e2 e3)
                                                                 (vec lista-elementos)
         Conjunto                 #{ e1 e2 e3 }                  (hash-set e1 e2 e3)
                                                                 (set lista-elementos)
         Diccionario              { c1 v1, c2 v2 }               (hash-map c1 v1 c2 v2)
¿Qu´ es Clojure?
   e                 El lenguaje   Secuencias   Macros    Memoria Software Transaccional (STM)   Integraci´n con Java
                                                                                                          o

Consultando un map

´
Algebra relacional y Clojure



         Operaci´n
                o                         SQL            Clojure
         Uni´n, ∪
            o                             -              (union conj1 conj2 )
         Diferencia,                     -              (difference conj1 conj2 )
         Producto, ×                      -              (for [x conj1 y conj2 ] ...)
         Renombrado, ρ                    AS             (rename conj {:antigua :nueva })
         Proyecci´n, π
                  o                       SELECT         (project conj [:clave1 :clave2 ...])
         Selecci´n, σ
                o                         WHERE          (select predicado conj)
         Reuni´n natural, ⊲⊳
               o                          JOIN           (join conj1 conj2 )
¿Qu´ es Clojure?
   e               El lenguaje   Secuencias   Macros   Memoria Software Transaccional (STM)   Integraci´n con Java
                                                                                                       o




Contenido

       1   ¿Qu´ es Clojure?
              e
       2   El lenguaje
             El REPL
             Primeras “escapadas” a Java
       3   Secuencias
             Trabajo con funciones
             Consultando un map
             Evaluaci´n vaga
                      o
       4   Macros
       5   Memoria Software Transaccional (STM)
       6   Integraci´n con Java
                    o
¿Qu´ es Clojure?
   e               El lenguaje   Secuencias   Macros   Memoria Software Transaccional (STM)   Integraci´n con Java
                                                                                                       o




Contenido

       1   ¿Qu´ es Clojure?
              e
       2   El lenguaje
             El REPL
             Primeras “escapadas” a Java
       3   Secuencias
             Trabajo con funciones
             Consultando un map
             Evaluaci´n vaga
                      o
       4   Macros
       5   Memoria Software Transaccional (STM)
       6   Integraci´n con Java
                    o
¿Qu´ es Clojure?
   e               El lenguaje   Secuencias   Macros   Memoria Software Transaccional (STM)   Integraci´n con Java
                                                                                                       o




Contenido

       1   ¿Qu´ es Clojure?
              e
       2   El lenguaje
             El REPL
             Primeras “escapadas” a Java
       3   Secuencias
             Trabajo con funciones
             Consultando un map
             Evaluaci´n vaga
                      o
       4   Macros
       5   Memoria Software Transaccional (STM)
       6   Integraci´n con Java
                    o
¿Qu´ es Clojure?
   e               El lenguaje   Secuencias   Macros   Memoria Software Transaccional (STM)   Integraci´n con Java
                                                                                                       o




¿Qu´ nos hemos dejado?
   e



              Multim´todos
                    e
              Expresiones regulares (#‘‘w+’’, re-seq)
              Tests unitarios (deftest)
              Optimizaciones a la recursi´n (trampoline)
                                         o
              Mucho m´s sobre listas vagas (lazy-seq)
                     a
              Algo m´s sobre macros (~@, manipulaci´n del c´digo)
                    a                              o       o
              Trabajo con XML (clojure.xml.parse)
              Librer´ librer´ y m´s librer´
                    ıas,    ıas  a        ıas
¿Qu´ es Clojure?
   e               El lenguaje   Secuencias   Macros   Memoria Software Transaccional (STM)   Integraci´n con Java
                                                                                                       o




Referencias
       Sitios web
            Web oficial: http://clojure.org
              Blog de Cosmin Stejerean: http://onclojure.com

       Plug-ins para IDEs
              Counterclockwise (Eclipse):
              http://code.google.com/p/counterclockwise
              Enclojure (NetBeans): http://www.enclojure.org
              Emacs: http://github.com/jochu/clojure-mode
              VimClojure:
              http://kotka.de/projects/clojure/vimclojure.html

       Libros
       Programming Clojure por Stuart Halloway, The Pragmatic Bookshelf
¿Qu´ es Clojure?
   e               El lenguaje   Secuencias   Macros   Memoria Software Transaccional (STM)   Integraci´n con Java
                                                                                                       o




                                     ¿Preguntas?
¿Qu´ es Clojure?
   e               El lenguaje   Secuencias   Macros   Memoria Software Transaccional (STM)   Integraci´n con Java
                                                                                                       o




                                 ¡Muchas gracias!
¿Qu´ es Clojure?
   e               El lenguaje   Secuencias   Macros   Memoria Software Transaccional (STM)   Integraci´n con Java
                                                                                                       o




         Esta presentaci´n fue tipografiada usando el paquete Beamer de
                        o
                          LTEXy el programa Texmaker
                           A


         Esta obra se encuentra bajo los t´rminos de la licencia Creative
                                          e
         Commons 3.0 Reconocimiento - No Comercial - Compartir Igual
             http://creativecommons.org/licenses/by-nc-sa/3.0/es/

Más contenido relacionado

PDF
Java Sobrecarga y Recursividad
pbcanessa
 
PPT
Programación III (Java) - 08 threads
Andoni Eguíluz Morán
 
PPTX
Gustavo 07 redes neuronales matlab
Wige Marr
 
PDF
Java Threads (Hilos en Java)
José Guillermo Cemé Canul
 
PPTX
Multitarea e hilos en java
Tensor
 
PDF
Thread group demonios- parte1
Abrahan Reyes
 
PPT
Threads en Java
Ronny Parra
 
Java Sobrecarga y Recursividad
pbcanessa
 
Programación III (Java) - 08 threads
Andoni Eguíluz Morán
 
Gustavo 07 redes neuronales matlab
Wige Marr
 
Java Threads (Hilos en Java)
José Guillermo Cemé Canul
 
Multitarea e hilos en java
Tensor
 
Thread group demonios- parte1
Abrahan Reyes
 
Threads en Java
Ronny Parra
 

La actualidad más candente (19)

PDF
Tema 12 hilos en java por gio
Robert Wolf
 
PDF
Clase 2/4 Curso Introducción a Python 2012
Nahuel Defossé
 
PPT
Programando en java
julianbm60
 
PDF
Administración de memoria en java
Luis Miguel De Bello
 
PDF
Diseño formal de máquinas virtuales Java
dcerezo
 
DOCX
Librerias java
Carlos Anibal Riascos Hurtado
 
PDF
Clase 3/4 Curso Introducción a Python 2012
Nahuel Defossé
 
PDF
Thread 02
Luis Miguel De Bello
 
PDF
Utp sirn_sl2 la rna perceptron
jcbenitezp
 
PDF
Thread 01
Luis Miguel De Bello
 
PDF
Utp sirn_sl4 la rna perceptron
c09271
 
PDF
GUIA 1 HILOS Y PROCESOS
Mario Martinez
 
PDF
Programación multihebra en java
Laboratorios ACME
 
PPT
LibreríAs De Java
Universidad Veracruzana
 
PDF
Lenguaje de programación Ruby
Cristian Alejandro Rojas Quintero
 
PDF
Ruby es un lenguaje de programación interpretado
Yulgrecia2011
 
PDF
Aic multiproc
Xavier Davias
 
Tema 12 hilos en java por gio
Robert Wolf
 
Clase 2/4 Curso Introducción a Python 2012
Nahuel Defossé
 
Programando en java
julianbm60
 
Administración de memoria en java
Luis Miguel De Bello
 
Diseño formal de máquinas virtuales Java
dcerezo
 
Clase 3/4 Curso Introducción a Python 2012
Nahuel Defossé
 
Utp sirn_sl2 la rna perceptron
jcbenitezp
 
Utp sirn_sl4 la rna perceptron
c09271
 
GUIA 1 HILOS Y PROCESOS
Mario Martinez
 
Programación multihebra en java
Laboratorios ACME
 
LibreríAs De Java
Universidad Veracruzana
 
Lenguaje de programación Ruby
Cristian Alejandro Rojas Quintero
 
Ruby es un lenguaje de programación interpretado
Yulgrecia2011
 
Aic multiproc
Xavier Davias
 
Publicidad

Destacado (20)

PPTX
Programacion en java
ANGELA FREIRE
 
PPT
Fase 5 ciclo for
luisoctis
 
PDF
Trabajo práctico sobre Clojure, Evaluación de un Lenguaje de Programación
Emmanuel Fontán
 
PPT
Clojure
Yiguang Hu
 
PDF
Introduction to Clojure
Renzo Borgatti
 
PPTX
Introduction to Clojure and why it's hot for Sart-Ups
edlich
 
PDF
Ciclos
Daniel Cáceres
 
PPTX
Certificación java 6 cap 5
srBichoRaro
 
PPT
While do while
pedrorodriguez20044
 
PDF
Flujo de un programa Java (I)
alvaro gonzalez
 
ODP
Modulo 1
Yanina Caffetti
 
PDF
86535551 ciclo-de-vida-jsf
pablo lopez
 
PDF
Ciclos Java - NetsBeans - Algoritmia
Daniel Gómez
 
PPT
Plataforma de programación Java
Antonio Contreras
 
PPTX
Curso java
smartsheyla
 
PPTX
Sentencias de control en java
Lorenna Glez
 
KEY
Functional programming in clojure
Juan-Manuel Gimeno
 
PPT
ProgramacióN En Java Variables Y Ciclos
Andres Garcia
 
PPTX
Captura de datos y mensajes Interfaz - JAVA
Jose Diaz Silva
 
PPT
Java script(diapositivas)
Roberto Mejia
 
Programacion en java
ANGELA FREIRE
 
Fase 5 ciclo for
luisoctis
 
Trabajo práctico sobre Clojure, Evaluación de un Lenguaje de Programación
Emmanuel Fontán
 
Clojure
Yiguang Hu
 
Introduction to Clojure
Renzo Borgatti
 
Introduction to Clojure and why it's hot for Sart-Ups
edlich
 
Certificación java 6 cap 5
srBichoRaro
 
While do while
pedrorodriguez20044
 
Flujo de un programa Java (I)
alvaro gonzalez
 
Modulo 1
Yanina Caffetti
 
86535551 ciclo-de-vida-jsf
pablo lopez
 
Ciclos Java - NetsBeans - Algoritmia
Daniel Gómez
 
Plataforma de programación Java
Antonio Contreras
 
Curso java
smartsheyla
 
Sentencias de control en java
Lorenna Glez
 
Functional programming in clojure
Juan-Manuel Gimeno
 
ProgramacióN En Java Variables Y Ciclos
Andres Garcia
 
Captura de datos y mensajes Interfaz - JAVA
Jose Diaz Silva
 
Java script(diapositivas)
Roberto Mejia
 
Publicidad

Similar a Clojure: Java y Lisp, unidos (20)

DOCX
Introducción a java
waldinelly
 
PPT
C1 java introduccion
Mariano Galvez
 
PPT
C1 java introduccion
Mariano Galvez
 
PDF
Manual.curso.de.java.desde.cero
Lalo Pérez
 
PDF
Java desde 0 pre
jtk1
 
PDF
Java desde 0 pre
jtk1
 
PPTX
Presentacion de ruby
Karlytozdj
 
PPT
Fundamentos u3 v1
Lubas Pc
 
PPTX
Java
Gómez Albino
 
PDF
Java desde 0
Saviotec
 
PPTX
Lenguaje Java
Cristian Alexander
 
PDF
Cartilla de-java-basico-actualizado
Robert Wolf
 
PDF
Conceptos Fundamentales de POO
sena
 
DOC
Manual de-java
ernestovillar
 
PPSX
Clase n°1 java
jbersosa
 
PPTX
CUESTIONARIO JAVA
jesanchez5
 
RTF
Que es java
Esmeralda Salvador
 
RTF
Que es java
Esmeralda Salvador
 
RTF
Que es java
Esmeralda Salvador
 
ZIP
Manual de-java
eliseorm
 
Introducción a java
waldinelly
 
C1 java introduccion
Mariano Galvez
 
C1 java introduccion
Mariano Galvez
 
Manual.curso.de.java.desde.cero
Lalo Pérez
 
Java desde 0 pre
jtk1
 
Java desde 0 pre
jtk1
 
Presentacion de ruby
Karlytozdj
 
Fundamentos u3 v1
Lubas Pc
 
Java desde 0
Saviotec
 
Lenguaje Java
Cristian Alexander
 
Cartilla de-java-basico-actualizado
Robert Wolf
 
Conceptos Fundamentales de POO
sena
 
Manual de-java
ernestovillar
 
Clase n°1 java
jbersosa
 
CUESTIONARIO JAVA
jesanchez5
 
Que es java
Esmeralda Salvador
 
Que es java
Esmeralda Salvador
 
Que es java
Esmeralda Salvador
 
Manual de-java
eliseorm
 

Último (20)

PPTX
Descubre los Dispositivos de Salida Como Usarlo
AlexanderHermndez
 
PDF
Distribución de Frecuencias Excel Eleazar Muñoz
Eleazar88
 
PPTX
INTRODUCCION A BASE DE DATOS NIVELBASICO 6
Cangrilg
 
PDF
DIAGRAMA DE PARETO M. Camila Duque Loaiz
MariacamilaDuqueloai
 
PDF
Estructuras básicas Conceptos básicos de programación.pdf
sdbdsamuel
 
PDF
Tecnología 2do período Eliana valencia.
ElianaValencia28
 
PPTX
Intro to 3D Printing Credit 1(Span).pptx
rlink3
 
PDF
2do grado medios de transportes.pdf para el primario
AndreaAlegre18
 
PDF
0621 LOS MATERIALES Y SUS USOS .2º CICLO_compressed.pdf
AndreaAlegre18
 
PDF
Distribución de frecuencias y Diagrama de Pareto en Exce (2).pdf
samuelcuaran
 
DOCX
tecnologia actividad segundo periodo.docx
samuelcuaran
 
PDF
Conceptos básicos de programación trabajo grupal
darcyrobayo2007
 
PPTX
Telecomunicaciones proyeccion de ventas 2025.pptx
miguelolivarren2
 
PDF
operaciones unitarias clase 1 1-2025-1.pdf
RicardoFlores571358
 
DOCX
Informe de Tecnologia Diagrama de Pareto Juan Martinez, Alexandra Delgado, L...
edepisabellanaranjo
 
PDF
excel.pdf valentinamueses111 trabajo tecnologia
4zz5vkthyk
 
PPTX
Normas de la sala de informática Segundo
SilviaFernandaCesped
 
DOCX
#USOLASTICPARA Proyecto integrador M1S4PI JuarezGonzalez _Maria_M1S4PI.doc...
MariaSusanaJuarezGon
 
PDF
Chile Claro Swap Project Guidebook Version 1.4.1b.pdf
DarkoAlmanzaTrujillo
 
PPTX
Customer Events - DeepRacer L200_ES.pptx
jcoronel
 
Descubre los Dispositivos de Salida Como Usarlo
AlexanderHermndez
 
Distribución de Frecuencias Excel Eleazar Muñoz
Eleazar88
 
INTRODUCCION A BASE DE DATOS NIVELBASICO 6
Cangrilg
 
DIAGRAMA DE PARETO M. Camila Duque Loaiz
MariacamilaDuqueloai
 
Estructuras básicas Conceptos básicos de programación.pdf
sdbdsamuel
 
Tecnología 2do período Eliana valencia.
ElianaValencia28
 
Intro to 3D Printing Credit 1(Span).pptx
rlink3
 
2do grado medios de transportes.pdf para el primario
AndreaAlegre18
 
0621 LOS MATERIALES Y SUS USOS .2º CICLO_compressed.pdf
AndreaAlegre18
 
Distribución de frecuencias y Diagrama de Pareto en Exce (2).pdf
samuelcuaran
 
tecnologia actividad segundo periodo.docx
samuelcuaran
 
Conceptos básicos de programación trabajo grupal
darcyrobayo2007
 
Telecomunicaciones proyeccion de ventas 2025.pptx
miguelolivarren2
 
operaciones unitarias clase 1 1-2025-1.pdf
RicardoFlores571358
 
Informe de Tecnologia Diagrama de Pareto Juan Martinez, Alexandra Delgado, L...
edepisabellanaranjo
 
excel.pdf valentinamueses111 trabajo tecnologia
4zz5vkthyk
 
Normas de la sala de informática Segundo
SilviaFernandaCesped
 
#USOLASTICPARA Proyecto integrador M1S4PI JuarezGonzalez _Maria_M1S4PI.doc...
MariaSusanaJuarezGon
 
Chile Claro Swap Project Guidebook Version 1.4.1b.pdf
DarkoAlmanzaTrujillo
 
Customer Events - DeepRacer L200_ES.pptx
jcoronel
 

Clojure: Java y Lisp, unidos

  • 1. Clojure Java y Lisp, unidos Alejandro Serrano Mena [email protected] Ciclo de Lenguajes Funcionales Marzo-Mayo 2010, Escuela Polit´cnica Superior, UAM e
  • 2. ¿Qu´ es Clojure? e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java o Contenido 1 ¿Qu´ es Clojure? e 2 El lenguaje El REPL Primeras “escapadas” a Java 3 Secuencias Trabajo con funciones Consultando un map Evaluaci´n vaga o 4 Macros 5 Memoria Software Transaccional (STM) 6 Integraci´n con Java o
  • 3. ¿Qu´ es Clojure? e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java o Un primer acercamiento Un dialecto moderno de Lisp que corre bajo la plataforma Java, con un ojo puesto en la concurrencia
  • 4. ¿Qu´ es Clojure? e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java o Algunas caracter´ ısticas de Lisp Sintaxis casi inexistente, basada en par´ntesis e (defun ejemplo (t) (cond ((> t 3) (print ‘‘Hola’’)) (t (print ‘‘Adios’’)))) Clojure la limpia bastante Evitando en muchos casos los par´ntesis e Introduciendo otros s´ ımbolos visualmente distintos (defn ejemplo [t] (cond (> t 3) (print ‘‘Hola’’) :else (print ‘‘Adios’’)))
  • 5. ¿Qu´ es Clojure? e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java o Algunas caracter´ ısticas de Lisp La lista es la unidad b´sica de funcionamiento a De hecho, la celda cons En Clojure se cambia por la secuencia, que es una interfaz gen´rica para listas, conjuntos, vectores. . . e
  • 6. ¿Qu´ es Clojure? e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java o Algunas caracter´ ısticas de Lisp Es homoic´nico o Datos y programas se describen del mismo modo Permite escribir macros, es decir, extender el lenguaje de forma sencilla
  • 7. ¿Qu´ es Clojure? e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java o Clojure y Java Clojure corre en la misma m´quina virtual que Java a Podemos usar todas las clases que nos ofrece la librer´ est´ndar ıa a de Java, y todas aquellas a las que estemos acostumbrado de nuestro trabajo con ese lenguaje La mayor parte de las herramientas (JUnit, Ant. . . ) tambi´n e sirven para Clojure Tambi´n podemos crear nuevos elementos que se puedan usar e dentro de c´digo Java o En general, los proyectos tendr´n una parte en Java y otra en a Clojure, us´ndose cada lenguaje all´ donde sea m´s util a ı a ´
  • 8. ¿Qu´ es Clojure? e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java o Programaci´n funcional o Clojure est´ pensado para ser usado funcionalmente (aunque a tambi´n puede usarse de forma estructurada ´ OO) e o Permite pasar funciones como argumentos y tenerlas como valor de retorno Usa estructuras de datos inmutables En vez de usar funciones que cambien el estado de un objeto, tendremos funciones que crean nuevos datos a partir de otros Permiten una mejor aproximaci´n a la concurrencia, como ve- o remos en la parte de STM
  • 9. ¿Qu´ es Clojure? e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java o Contenido 1 ¿Qu´ es Clojure? e 2 El lenguaje El REPL Primeras “escapadas” a Java 3 Secuencias Trabajo con funciones Consultando un map Evaluaci´n vaga o 4 Macros 5 Memoria Software Transaccional (STM) 6 Integraci´n con Java o
  • 10. ¿Qu´ es Clojure? e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java o Primeras “escapadas” a Java Traducci´n Java-Clojure o Java Clojure import ns.Clase1 (import ’(ns Clase Clase2)) import ns.Clase2 new Clase(arg1, arg2...) (Clase. arg1 arg2 ...) (new Clase arg1 arg2 ...) obj.metodo(arg1, arg2, ...) (metodo. obj arg1 arg2 ...) (. obj metodo arg1 arg2 ...) Clase.estatico(arg1, arg2, ...) (Clase/estatico arg1 arg2 ...) obj.metodo1().metodo2().metodo3() (.. obj metodo1 metodo2 metodo3)
  • 11. ¿Qu´ es Clojure? e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java o Contenido 1 ¿Qu´ es Clojure? e 2 El lenguaje El REPL Primeras “escapadas” a Java 3 Secuencias Trabajo con funciones Consultando un map Evaluaci´n vaga o 4 Macros 5 Memoria Software Transaccional (STM) 6 Integraci´n con Java o
  • 12. ¿Qu´ es Clojure? e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java o Trabajo con funciones Tipos de secuencias Sintaxis Constructores Lista ( e1 e2 e3 ) (list e1 e2 e3) Vector [ e1 e2 e3 ] (vector e1 e2 e3) (vec lista-elementos) Conjunto #{ e1 e2 e3 } (hash-set e1 e2 e3) (set lista-elementos) Diccionario { c1 v1, c2 v2 } (hash-map c1 v1 c2 v2)
  • 13. ¿Qu´ es Clojure? e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java o Consultando un map ´ Algebra relacional y Clojure Operaci´n o SQL Clojure Uni´n, ∪ o - (union conj1 conj2 ) Diferencia, - (difference conj1 conj2 ) Producto, × - (for [x conj1 y conj2 ] ...) Renombrado, ρ AS (rename conj {:antigua :nueva }) Proyecci´n, π o SELECT (project conj [:clave1 :clave2 ...]) Selecci´n, σ o WHERE (select predicado conj) Reuni´n natural, ⊲⊳ o JOIN (join conj1 conj2 )
  • 14. ¿Qu´ es Clojure? e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java o Contenido 1 ¿Qu´ es Clojure? e 2 El lenguaje El REPL Primeras “escapadas” a Java 3 Secuencias Trabajo con funciones Consultando un map Evaluaci´n vaga o 4 Macros 5 Memoria Software Transaccional (STM) 6 Integraci´n con Java o
  • 15. ¿Qu´ es Clojure? e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java o Contenido 1 ¿Qu´ es Clojure? e 2 El lenguaje El REPL Primeras “escapadas” a Java 3 Secuencias Trabajo con funciones Consultando un map Evaluaci´n vaga o 4 Macros 5 Memoria Software Transaccional (STM) 6 Integraci´n con Java o
  • 16. ¿Qu´ es Clojure? e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java o Contenido 1 ¿Qu´ es Clojure? e 2 El lenguaje El REPL Primeras “escapadas” a Java 3 Secuencias Trabajo con funciones Consultando un map Evaluaci´n vaga o 4 Macros 5 Memoria Software Transaccional (STM) 6 Integraci´n con Java o
  • 17. ¿Qu´ es Clojure? e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java o ¿Qu´ nos hemos dejado? e Multim´todos e Expresiones regulares (#‘‘w+’’, re-seq) Tests unitarios (deftest) Optimizaciones a la recursi´n (trampoline) o Mucho m´s sobre listas vagas (lazy-seq) a Algo m´s sobre macros (~@, manipulaci´n del c´digo) a o o Trabajo con XML (clojure.xml.parse) Librer´ librer´ y m´s librer´ ıas, ıas a ıas
  • 18. ¿Qu´ es Clojure? e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java o Referencias Sitios web Web oficial: http://clojure.org Blog de Cosmin Stejerean: http://onclojure.com Plug-ins para IDEs Counterclockwise (Eclipse): http://code.google.com/p/counterclockwise Enclojure (NetBeans): http://www.enclojure.org Emacs: http://github.com/jochu/clojure-mode VimClojure: http://kotka.de/projects/clojure/vimclojure.html Libros Programming Clojure por Stuart Halloway, The Pragmatic Bookshelf
  • 19. ¿Qu´ es Clojure? e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java o ¿Preguntas?
  • 20. ¿Qu´ es Clojure? e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java o ¡Muchas gracias!
  • 21. ¿Qu´ es Clojure? e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java o Esta presentaci´n fue tipografiada usando el paquete Beamer de o LTEXy el programa Texmaker A Esta obra se encuentra bajo los t´rminos de la licencia Creative e Commons 3.0 Reconocimiento - No Comercial - Compartir Igual http://creativecommons.org/licenses/by-nc-sa/3.0/es/