Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Clojure Intro
Misha Kozik
@mishadoff
Yet Another JVM Language?
Rationale
A Lisp 
for Functional Programming 
symbiotic with an Established Platform 
designed for Concurrency
           ...
Clojure Philosophy
Clojure Philosophy
Lots of Irritating Stupid Parentheses
(defn concat [xs ys]
  (if (empty? xs) ys
      (let [[h & t] xs]
        (cons h (c...
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
● Destructur...
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, Carmin...
Getting Started
● Official website
● Clojure Docs
● Try Clojure
● 4clojure
● Comprehensive clojure overview
● Planet Cloju...
Books
Q?
Upcoming SlideShare
Loading in …5
×

Clojure Intro

1,411 views

Published on

Brief Introduction to Clojure

Published in: Technology
  • Be the first to comment

Clojure Intro

  1. 1. Clojure Intro Misha Kozik @mishadoff
  2. 2. Yet Another JVM Language?
  3. 3. Rationale A Lisp  for Functional Programming  symbiotic with an Established Platform  designed for Concurrency                        ­ Rich Hickey
  4. 4. Clojure Philosophy
  5. 5. Clojure Philosophy
  6. 6. Lots of Irritating Stupid Parentheses (defn concat [xs ys]   (if (empty? xs) ys       (let [[h & t] xs]         (cons h (concat t ys)))))
  7. 7. LISt Processing (defn concat [xs ys]   (if (empty? xs) ys       (let [[h & t] xs]         (cons h (concat t ys)))))
  8. 8. LISt Processing (defn concat [xs ys]   (if (empty? xs) ys       (let [[h & t] xs]         (cons h (concat t ys)))))
  9. 9. LISt Processing (defn concat [xs ys]   (if (empty? xs) ys       (let [[h & t] xs]         (cons h (concat t ys)))))
  10. 10. (+ (* 2 5)      (/ 1 7))  Prefix notation   Do you speak it?
  11. 11. Syntax Code Mode: Data Mode: Special Mode: '(1 2 3 4) (+ 1 2 3 4)  (def a 42)
  12. 12. 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!
  13. 13. Demo jug.clj http://goo.gl/oI7joI
  14. 14. IDE
  15. 15. IDE VimClojure LightTable Counter Clockwise Enclojure La Clojure
  16. 16. 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!
  17. 17. Getting Started ● Official website ● Clojure Docs ● Try Clojure ● 4clojure ● Comprehensive clojure overview ● Planet Clojure ● Learn Clojure ● StackOverflow questions ● GitHub repositories ● My Blog
  18. 18. Books
  19. 19. Q?

×