LISP 2 Funcional Ejemplos de PF 3 Innovaciones Concurrencia STM Otras abstracciones concurrentes J. Albert Cruz Almaguer (jalbert@uci.cu) Introducción a Clojure
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
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
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
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
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
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
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
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
(−>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