Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Clojure introduction

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

Clojure introduction

Avatar for jalbertcruz

jalbertcruz

March 04, 2013
Tweet

Other Decks in Technology

Transcript

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

    Almaguer J. Albert Cruz Almaguer ([email protected]) 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 ([email protected]) Introducción a Clojure
  3. LISP Funcional Innovaciones Miembro de la familia LISP Clojure es

    un LISP DEMOS J. Albert Cruz Almaguer ([email protected]) 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 ([email protected]) 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 ([email protected]) 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 ([email protected]) 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 ([email protected]) 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 ([email protected]) 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 ([email protected]) 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 ([email protected]) 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 ([email protected]) Introducción a Clojure
  12. 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 ([email protected]) 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 ([email protected]) Introducción a Clojure
  14. 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 ([email protected]) Introducción a Clojure
  15. LISP Funcional Innovaciones STM STM en Clojure Modelo funcional: no

    estado mutable Modelo de referencias: con estado mutable J. Albert Cruz Almaguer ([email protected]) 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 ([email protected]) Introducción a Clojure
  17. 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 ([email protected]) Introducción a Clojure
  18. LISP Funcional Innovaciones Otras abstracciones concurrentes Tipo Agent agent: tipo

    referencia asincrónico, utilizable en contextos de STM J. Albert Cruz Almaguer ([email protected]) Introducción a Clojure