Pro Yearly is on sale from $80 to $50! »

Clojure introduction

Clojure introduction

0a09051ecca6427ea2c96c3a90094a7b?s=128

jalbertcruz

March 04, 2013
Tweet

Transcript

  1. LISP Funcional Innovaciones Introducción a Clojure MSc. José Albert Cruz

    Almaguer J. Albert Cruz Almaguer (jalbert@uci.cu) Introducción a Clojure
  2. LISP Funcional Innovaciones Sumario 1 LISP Miembro de la familia

    LISP 2 Funcional Ejemplos de PF 3 Innovaciones Concurrencia STM Otras abstracciones concurrentes J. Albert Cruz Almaguer (jalbert@uci.cu) Introducción a Clojure
  3. LISP Funcional Innovaciones Miembro de la familia LISP Clojure es

    un LISP DEMOS J. Albert Cruz Almaguer (jalbert@uci.cu) Introducción a Clojure
  4. LISP Funcional Innovaciones Miembro de la familia LISP Clojure, lenguaje

    homoiconic Definition (Homoiconic) Lenguaje de programación que posee los componentes del AST como datos y que permite escribir literales de dichos tipos de datos. Definition (Homoiconic) Lenguaje de programación que usa sus propias estructuras de datos para representar su código (code as data). homo ⇒ igual icon ⇒ representación J. Albert Cruz Almaguer (jalbert@uci.cu) Introducción a Clojure
  5. LISP Funcional Innovaciones Miembro de la familia LISP Clojure, lenguaje

    homoiconic ( repeat 3 ’ a ) ( l i s t ’ repeat 3 ’ a) J. Albert Cruz Almaguer (jalbert@uci.cu) Introducción a Clojure
  6. LISP Funcional Innovaciones Miembro de la familia LISP Estructura de

    control if en Clojure ( i f (= 1 1) ( p r i n t l n "Son iguales ! " ) ( p r i n t l n "No son iguales ! " ) ) J. Albert Cruz Almaguer (jalbert@uci.cu) Introducción a Clojure
  7. LISP Funcional Innovaciones Miembro de la familia LISP ¿Y si

    necesito una estructura unless? ( i f (= 1 1) ( p r i n t l n "Son iguales ! " ) ( p r i n t l n "No son iguales ! " ) ) ( unless expr form ) −> ( i f expr n i l form ) J. Albert Cruz Almaguer (jalbert@uci.cu) Introducción a Clojure
  8. LISP Funcional Innovaciones Miembro de la familia LISP Metaprogramando en

    Clojure ( unless f als e ( p r i n t l n " Hola ! " ) ) ( i f f als e n i l ( p r i n t l n " Hola ! " ) ) J. Albert Cruz Almaguer (jalbert@uci.cu) Introducción a Clojure
  9. LISP Funcional Innovaciones Miembro de la familia LISP Macros en

    Clojure ( defmacro unless [ expr form ] ( l i s t ’ i f expr n i l form ) ) J. Albert Cruz Almaguer (jalbert@uci.cu) Introducción a Clojure
  10. LISP Funcional Innovaciones Ejemplos de PF Funciones de orden superior

    (map ∗ [1 2 3 4] [5 6 7 8] ) ; = (5 12 21 32) ( reduce max [0 −3 100 48]) ; = 100 J. Albert Cruz Almaguer (jalbert@uci.cu) Introducción a Clojure
  11. LISP Funcional Innovaciones Ejemplos de PF Evaluación lazy ( defn

    random−i n t s [ l i m i t ] ( lazy−seq ( p r i n t l n " Calculando número a l e a t o r i o " ) ( cons ( rand−i n t l i m i t ) ( random−i n t s l i m i t ) ) ) ) ( def rands ( take 10 ( random−i n t s 50))) ; = # ’ user / rands J. Albert Cruz Almaguer (jalbert@uci.cu) Introducción a Clojure
  12. LISP Funcional Innovaciones Ejemplos de PF Evaluación lazy DEMO J.

    Albert Cruz Almaguer (jalbert@uci.cu) Introducción a Clojure
  13. LISP Funcional Innovaciones Concurrencia Delays/futures Patrones Delays: Suspención de un

    fragmento de código, evaluado sobre demanda, cuando es dereferenciado. Future: Evaluación de un código en otro hilo. Ejemplo de future ( def calc ( f ut ure ( apply + ( range 1e8 ) ) ) ) ; = # ’ user / calc J. Albert Cruz Almaguer (jalbert@uci.cu) Introducción a Clojure
  14. LISP Funcional Innovaciones Concurrencia Delays/futures Patrones Delays: Suspención de un

    fragmento de código, evaluado sobre demanda, cuando es dereferenciado. Future: Evaluación de un código en otro hilo. Ejemplo de future ( def calc ( f ut ure ( apply + ( range 1e8 ) ) ) ) ; = # ’ user / calc J. Albert Cruz Almaguer (jalbert@uci.cu) Introducción a Clojure
  15. LISP Funcional Innovaciones Concurrencia Promesas Dataflow variables Promesas: variables de

    una sola escritura. ( def a ( promise ) ) ( def b ( promise ) ) ( def c ( promise ) ) ( f ut ure ( d e l i v e r c (+ @a @b) ) ( p r i n t l n " Delivery complete ! , c´s value : " @c) ) J. Albert Cruz Almaguer (jalbert@uci.cu) Introducción a Clojure
  16. LISP Funcional Innovaciones STM STM en Clojure Modelo funcional: no

    estado mutable Modelo de referencias: con estado mutable J. Albert Cruz Almaguer (jalbert@uci.cu) Introducción a Clojure
  17. LISP Funcional Innovaciones STM STM en Clojure Modelo funcional: no

    estado mutable Modelo de referencias: con estado mutable J. Albert Cruz Almaguer (jalbert@uci.cu) Introducción a Clojure
  18. LISP Funcional Innovaciones STM STM en Clojure ( def a

    (−>Account ( ref 500))) ( def b (−>Account ( ref 500))) ( defn t r a n s f e r [ from to amount ] (dosync ( . deposit to amount ) ( . withdraw from amount ) ) ) ( t r a n s f e r a b 12) J. Albert Cruz Almaguer (jalbert@uci.cu) Introducción a Clojure
  19. LISP Funcional Innovaciones Otras abstracciones concurrentes Tipo Agent agent: tipo

    referencia asincrónico, utilizable en contextos de STM J. Albert Cruz Almaguer (jalbert@uci.cu) Introducción a Clojure
  20. LISP Funcional Innovaciones Otras abstracciones concurrentes ¡Gracias! ¿Preguntas? J. Albert

    Cruz Almaguer (jalbert@uci.cu) Introducción a Clojure