Clojure Intro
Misha Kozik
@mishadoff
Yet Another JVM Language?
Rationale
A Lisp 
for Functional Programming 
symbiotic with an Established Platform 
designed for Concurrency
                       ­ Rich Hickey
Clojure Philosophy
Clojure Philosophy
Lots of Irritating Stupid Parentheses
(defn concat [xs ys]
  (if (empty? xs) ys
      (let [[h & t] xs]
        (cons h (concat t ys)))))
LISt Processing
(defn concat [xs ys]
  (if (empty? xs) ys
      (let [[h & t] xs]
        (cons h (concat t ys)))))
LISt Processing
(defn concat [xs ys]
  (if (empty? xs) ys
      (let [[h & t] xs]
        (cons h (concat t ys)))))
LISt Processing
(defn concat [xs ys]
  (if (empty? xs) ys
      (let [[h & t] xs]
        (cons h (concat t ys)))))
(+ (* 2 5)  
   (/ 1 7))
 Prefix notation
  Do you speak it?
Syntax
Code Mode:
Data Mode:
Special Mode:
'(1 2 3 4)
(+ 1 2 3 4)
 (def a 42)
Quick Tour
● Value
● Function
● Scope
● List
● Vector
● Map
● Set
● Functional Features
● Automatic Promotion
● Destructuring
● Loop/Recur
● Time
● Memoization
● Lazy Sequences
● Threading macro
● Meta
● IO
● Regexps
● Record
● Protocol
● Type Hints
● Multimethods
● Exceptions
● Macro
● Concurrency
● Java­>Clojure
● Clojure­>Java
● Bonus!
Demo
jug.clj
http://goo.gl/oI7joI
IDE
IDE
VimClojure
LightTable
Counter Clockwise
Enclojure
La Clojure
Infrastructure
● Leiningen, Clojars
● Ring, Compojure, Enlive
● ClojureScript
● Pedestal
● Seesaw
● Datomic, Korma, Carmine, Monger
● Overtone, Incanter
● core.logic, core.match, core.async
● AppEngine, Heroku
● Write your own wrapper!
Getting Started
● Official website
● Clojure Docs
● Try Clojure
● 4clojure
● Comprehensive clojure overview
● Planet Clojure
● Learn Clojure
● StackOverflow questions
● GitHub repositories
● My Blog
Books
Q?

Clojure Intro