- dynamic
- funcional
- el código son datos (homoiconic)
- syntactic abstractions
- functions
- macros (no reader macros)
- repl (-> read eval print loop)
- sequence
- con estructuras de datos immutables con peristencia
- estado mutable / concurréncia
- acceso atómico (atom)
- sistema de memória transaccional (STM refs dosync)
- sistema agentes reactivos (agents)
- ¿donde puedo usar clojure?
- en java/JVM
- en javascript (clojurescript)
- puedes compartir código común.
- polimórfico/oo (oo+ defmulti, protocols, records, types)
- filosofía: pequeño conjunto de tipos con muchos metodos/funciones por tipo vs inversa.
- List ()
- Vector []
- Map, Set
- List no se evalua a una lista.
- (El resto de estructuras si)
- primer elemento lista es el operador
- función (evalución por substitución)
- special form (def, fn, if, do, let,…)
- macro (cond, defn,…)
- notación prefijo (* 2 (+ 1 2 3))
- Symbols
- Keywords
- Numbers (Rational, Enteros, Decimales)
- String, Character
- Boolean
- nil
- List (1 2)
- Vector [1 2]
- Map {:key “value”}
- Set #{1 2}
- deftype, defrecord
- loop/recur
- sequences (seqs) (Seq first, rest, cons) +
- high order functions
- lazy sequence