Date post: | 15-Nov-2014 |
Category: |
Technology |
Upload: | logan-campbell |
View: | 256 times |
Download: | 0 times |
CLOJURE WORKSHOP
println "Hello, World")(
println "Hello, World")(
SCALARS
nil
truefalse
3.14
\H\i
"Kittens are cute"
:hello
:foo/bar
'println
'clojure.core/println
COLLECTIONS
[1 2 4]3, , ,
4][1 2 3
[1 2 :three "four"]
:bar 2},{:foo 1
:bar 2}{:foo 1
{ "fizz" true :bugs false [1 2 3] {:do "re"}}
#{1 2 3}
'(1 2 3)
THE SEQUENCE ABSTRACTION
(first [1 2 3])
(first [1 2 3]); => 1
(first [1 2 3]); => 1
(first '(1 2 3))
(first [1 2 3]); => 1
(first '(1 2 3)); => 1
(first [1 2 3]); => 1
(first '(1 2 3)); => 1
(first #{1 2 3})
(first [1 2 3]); => 1
(first '(1 2 3)); => 1
(first #{1 2 3}); => 2
(first [1 2 3]); => 1
(first '(1 2 3)); => 1
(first #{1 2 3}); => 2
(first {:one 1 :two 2})
(first [1 2 3]); => 1
(first '(1 2 3)); => 1
(first #{1 2 3}); => 2
(first {:one 1 :two 2}); => [:two 2]
(range 10)
(range 10);=> (0 1 2 3 4 5 6 7 8 9)
(take 5 (range))
; => (0 1 2 3 4)(take 5 (range))
(defn fib [a b] (cons a (lazy-seq (fib b (+ b a)))))
FUNCTIONS
println "Hello, World")(
println "Hello, World")(
(+ 40 2)
(+ 10 8 20 4)
(fn [name] (println "Hello " name))
(def host "Thoughtworks")
[name] ( greet(def
) (println "Hello " name)) fn
(println "Hello " name)) fn greet(def [name]
(map inc [1 5 9])
(map inc [1 5 9])=> [2 6 10]
(defn create-incrementor [increment-by] (fn [number] (+ number increment-by)))
(map (create-incrementor 7) [1 5 9])
(defn create-incrementor [increment-by] (fn [number] (+ number increment-by)))
(map (create-incrementor 7) [1 5 9])
(defn create-incrementor [increment-by] (fn [number] (+ number increment-by)))
=> [8 12 16]
REAL WORLD
(fact (split "a/b/c" #"/") => ["a" "b" "c"])
(tabular (fact "The rules of Conway's life" (alive? ?cell-status ?neighbor-count) => ?expected)
?cell-status ?neighbor-count ?expected :alive 1 false :alive 2 true :alive 3 true :alive 4 false :dead 2 false :dead 3 true :dead 4 false)
AUTOMATED TESTS
(defdb prod (postgres {:db "korma" :user "db" :password "dbpass"})) (defentity address)(defentity user (has-one address)) (select user (with address) (fields :firstName :lastName :address.state) (where {:email "[email protected]"}))
SQL
(ns examples.json (:use cheshire.core))
(generate-string {:foo "bar" :baz 5})=> {“foo”: “bar”, “baz”: 5}
(parse-string "{\"foo\":\"bar\"}")=> {"foo" "bar"}
JSON
(ns examples.xml (:use clojure.xml) (:import java.io.File))
(def xml-doc (parse (File. "calendar.xml")))
(get-in xml-doc [:content 1 :content 0 :content])=> [“Rover’s birthday”]
XML PARSING
(ns examples.templating (:use hiccup.core) (html [:span {:class "foo"} "bar"])=> "<span class=\"foo\">bar</span>" (html [:ul (for [x (range 1 4)] [:li x])])=> "<ul><li>1</li><li>2</li><li>3</li></ul>"
HTML
(ns hello-world (:use compojure.core) (:require [compojure.route :as route]))
(defroutes app (GET "/" [] "<h1>Hello World</h1>") (route/not-found "<h1>Page not found</h1>"))
WEB
GUI
(ns seesaw.test.examples.slider (:use [seesaw core color border] seesaw.test.examples.example))
(defn make-frame [] (frame :title "Slider Example" :content (horizontal-panel :items [ (vertical-panel :items [ "<html>Slide the sliders to change<br>the color to the right</html>" (slider :id :red :min 0 :max 255) (slider :id :green :min 0 :max 255) (slider :id :blue :min 0 :max 255)]) (canvas :id :canvas :border (line-border) :size [200 :by 200])])))
(defn update-color [root] (let [{:keys [red green blue]} (value root)] (config! (select root [:#canvas]) :background (color red green blue))))
(defexample [] (let [root (make-frame)] (listen (map #(select root [%]) [:#red :#green :#blue]) :change (fn [e] (update-color root))) root))
GUI
FUNCTIONAL PROGRAMMING
number = 1 while number < 20 if number % 3 == 0 && number % 5 == 0 puts "fizzbuzz" elsif number % 3 == 0 puts "fizz" elsif number % 5 == 0 puts "buzz" else puts number end number = number + 1end
for number in 1..20 if number % 3 == 0 && number % 5 == 0 puts "fizzbuzz" elsif number % 3 == 0 puts "fizz" elsif number % 5 == 0 puts "buzz" else puts number endend
numbers = (0..20).map do |number| if number % 3 == 0 && number % 5 == 0 "fizzbuzz" elsif number % 3 == 0 "fizz" elsif number % 5 == 0 "buzz" else number endend puts numbers
(defn divisible-by? [divisor number] (= 0 (mod number divisor))) (defn fizz-buzzify [number] (cond (divisible-by? 15 number) "fizzbuzz" (divisible-by? 3 number) "fizz" (divisible-by? 5 number) "buzz" :else number)) (def fizz-buzz (map fizz-buzzify (range))) (mapv println (take 100 fizz-buzz))
RESOURCES
WEBSITES
CLOJURE.ORG
CLOJUREDOCS.ORG
CLOJARS.ORG
CLOJURE-DOC.ORG
VIDEO
YOUTUBE - CLOJURETV
INFOQ - CLOJURE TAG
BOOKS
CLOJURE PROGRAMMING
PROGRAMMING CLOJURE
CLOJURE IN ACTION
THE JOY OF CLOJURE
PRACTICAL CLOJURE
FP4OOP
SIMPLE MADE EASY
IMPLEMENTATIONS
Clojure (JVM)
ClojureScript
ClojureCLR
clojure-py
clojure-scheme
FINQuestions?