Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Functional Programming with Clojure
Search
James Hughes
September 23, 2014
Programming
160
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Functional Programming with Clojure
WWCB Clojure session
James Hughes
September 23, 2014
More Decks by James Hughes
See All by James Hughes
Tyrannosaurus Rx
kouphax
0
140
React
kouphax
2
750
Play for (Java|Scala)
kouphax
0
160
Devops: A Case Study
kouphax
0
110
Scala for C# Developers
kouphax
5
2.7k
Dropwizard - Production Ready Web Services
kouphax
3
1.7k
Scala for Fun & Profit
kouphax
4
680
What Agile Means To Me
kouphax
0
180
Neo4J: A Case Study
kouphax
3
710
Other Decks in Programming
See All in Programming
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
170
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
160
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
130
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
3
1.1k
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
300
Vibes Containers 〜AIで変わるコンテナ設計と運用〜
tkikuc
3
530
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
56
37k
typoなんかねぇよ
raspython3
0
690
不幸な GC
chencmd
0
900
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
230
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
130
Foundry Localでエージェント開発
seosoft
0
170
Featured
See All Featured
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
560
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Statistics for Hackers
jakevdp
799
230k
Agile that works and the tools we love
rasmusluckow
331
22k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
600
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.2k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
660
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Typedesign – Prime Four
hannesfritz
42
3.2k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Transcript
======================================== ! FUNCTIONAL PROGRAMMING WITH CLOJURE ! ========================================
1. SIDE EFFECT FREE 2. IMMUTABILITY 3. FIRST CLASS FUNCTIONS
4. FUNCTION BASED CONTROL FLOW ======================================== FUNCTIONAL PROGRAMMING ======================================== [1] ========================================
[2] +-----------------------+ | IMPERATIVE SHELL | | | | +-------------------+
| | | FUNCTIONAL CORE | | | | | | | +-------------------+ | +-----------------------+
1. LISP DIALECT 2. JVM & JS TARGETS 3. DYNAMIC
4. HOMOICONICITY 5. IMMUTABILITY 6. PLATFORM INTEROP 7. SMALL POWERFUL CORE 8. CONCURRENCY ======================================== CLOJURE ======================================== ========================================
======================================== ! SYNTAXING? ! ========================================
======================================== ! ======================================== 1 + 2
======================================== ! ======================================== (+ 1 2)
======================================== ! ======================================== add(1, 2)
======================================== ! ======================================== (add 1, 2)
======================================== ! ======================================== (add 1 2)
======================================== ! ======================================== 1 / 2 * 3
======================================== ! ======================================== (/ 1 (* 2 3))
======================================== ! CLOJURE BY EXAMPLE ! ========================================
➜ brew install leiningen ---------------------------------------- ➜ curl -Lo lein http://bit.ly/1m8fHx2
➜ chmod a+x lein ➜ ./lein ======================================== INSTALLING LEININGEN ======================================== ========================================
➜ lein repl ! nREPL server started on port ...
Clojure 1.6.0 ! user=> ======================================== THE REPL ======================================== ========================================
user=> (doc map) ; ------------------ ! user=> (find-doc "fold") ;
------------------ ======================================== THE REPL ======================================== ========================================
======================================== ! DATA TYPES ! ========================================
(class 1) (class "Hello") (class 1.0) (class \H) (class true)
java.lang.Long java.lang.String java.lang.Double java.lang.Character java.lang.Boolean ======================================== DATA TYPES ======================================== ========================================
(class nil) (class (fn [] 1)) (class 5/3) (class :test)
(class 'a) nil clojure.lang.IFn clojure.lang.Ratio clojure.lang.Keyword clojure.lang.Symbol ======================================== DATA TYPES ======================================== ========================================
(class '(1 2)) (class [1 2]) (class #{1 2}) (class
{:a 1 :b 2}) clojure.lang.List* clojure.lang.Vector* clojure.lang.Set* clojure.lang.Map* ======================================== DATA TYPES ======================================== ========================================
(= __ true) (= __ (= 2 2/1)) (= :a
(keyword __)) (= __ (== 2.0 2)) (= __ (= "a" :a 'a)) (= __ (= 2 2/1)) (not= __ false) (= false (not __)) ======================================== POP QUIZ HOT SHOT ======================================== ======================================== [3]
======================================== ! LISTS, VECTORS & SETS ! ========================================
(list 1 2 3 2 1) (vector 1 2 3
2 1) (hash-set 1 2 3 2 1) '(1 2 3 2 1) [1 2 3 2 1] #{1 2 3} ======================================== LISTS, VECTORS & SETS ======================================== ========================================
(= __ (count '(42))) (= __ (conj [1 2] 3))
(= __ (cons 1 [2 3])) (= __ (first [1 2 3])) (= __ (last [1 2 3])) ======================================== LISTS, VECTORS & SETS ======================================== ========================================
(= __ (rest [1 2 3])) (= __ (nth [1
2 3] 2)) (= __ (peek [1 2 3])) (= __ (pop [1 2 3])) (= __ (rest [])) ======================================== LISTS, VECTORS & SETS ======================================== ========================================
======================================== ! MAPS ! ========================================
(hash-map {:a 1}) (hash-map {:a 1 :b}) { :a 1
} ERROR! ======================================== MAPS ======================================== ========================================
(= __ (get {:b 2} :b)) (= __ ({:a 1}
:a)) (= __ (:a {:a 1})) (= __ (:b {:a 1})) (= __ (:b {:a 1} 2)) ======================================== MAPS ======================================== ========================================
(= __ (count {:a 1})) (= __ (:b {:a 1}
2)) (= __ (assoc {:a 1} :b 2)) (= __ (dissoc {:a 1 :b 2} :a)) (= __ (dissoc {:a 1 :b 2} :a :b)) ======================================== MAPS ======================================== ========================================
(= __ (contains? {:a nil :b nil} :b)) (= __
(keys {:a 1 :b 2})) (= __ (vals {:a 1 :b 2})) ======================================== MAPS ======================================== ========================================
======================================== ! FUNCTIONS ! ========================================
(def sq (fn [a] (* a a))) (defn sq [a]
(* a a)) (def sq #(* % %)) ======================================== FUNCTIONS ======================================== ========================================
(= __ ((fn [n] (* 5 n)) 2)) (= __
(#(* 15 %) 4)) (= __ (#(+ %1 %2 %3) 4 5 6)) (= __ (#(* 15 %2) 1 2)) (= 9 (((fn [] ___)) 4 5)) ======================================== FUNCTIONS ======================================== ========================================
======================================== ! CONDITIONALS ! ========================================
(= __ (if (false? (= 4 5)) :a :b)) (=
__ (if (> 4 3) [])) ======================================== CONDITIONALS ======================================== ========================================
(let [x 5] (= :your-road (cond (= x __) :road-not-taken
(= x __) :another-not-taken :else __))) ======================================== CONDITIONALS ======================================== ========================================
(let [choice 5] (= :your-road (case choice __ :road-not-taken __
:your-road :another-not-taken))) ======================================== CONDITIONALS ======================================== ========================================
======================================== ! LOOPING ! ========================================
(= __ (loop [v 1] (if-not (> v 5) (recur
(inc v)) v)) ======================================== LOOPING ======================================== ========================================
======================================== ! HIGHER ORDER FUNCTIONS ! ========================================
(= [__ __ __] (map #(* 4 %) [1 2
3])) (= __ (filter nil? [:a :b nil :c :d])) (= __ (reduce * [1 2 3 4])) ======================================== HIGHER ORDER FUNCTIONS ======================================== ========================================
======================================== ! LAZY SEQUENCES ! ========================================
(= __ (range 1 5)) (= __ (range 5)) (=
[0 1 2 3 4 5] (take __ (range 100))) (= __ (take 20 (iterate inc 0))) (= [:a :a :a :a :a :a] (repeat __ __)) ======================================== LAZY SEQUENCES ======================================== ========================================
======================================== ! USEFUL MACROS ! ========================================
(= __ (-> "a b c d" .toUpperCase (.replace "A"
"X") (.split " ") first)) ======================================== USEFUL MACROS ======================================== ========================================
(= __ (->> (range) (filter even?) (take 10) (reduce +)))
======================================== USEFUL MACROS ======================================== ========================================
(= __ (try (/ 1 0) true (catch Exception e
false))) ======================================== USEFUL MACROS ======================================== ========================================
======================================== ! ATOMS ! ========================================
(let [my-atom (atom 1)] (= __ @my-atom) (swap! my-atom inc)
(= __ @my-atom) (reset! my-atom 4) (= __ @my-atom)) ======================================== ATOMS ======================================== ========================================
1. JAVA INTEROP 2. MACROS 3. DESTRUCTURING 4. RECORDS 5.
PROTOCOLS 6. COMPREHENSION 7. TRANSDUCERS 8. CLOJURESCRIPT ======================================== (REST CLOJURE) ======================================== ========================================
======================================== IT’S DANGEROUS TO GO ALONE… ======================================== ======================================== 1. CLOJURE
GRIMOIRE 2. WEIRD & WONDERFUL CHARACTERS OF CLOJURE 3. CLOJURE DOCS 4. CLOJURE FOR THE BRAVE AND TRUE
======================================== DEAD TREE EDITION ======================================== ======================================== 1. JOY OF CLOJURE
2ND EDITION 2. PROGRAMMING CLOJURE 3. FUNCTIONAL THINKING 4. STRUCTURE & INTERPRETATION OF COMPUTER PROGRAMS
======================================== ATTRIBUTION ======================================== [1]: http://bit.ly/learning-clojure [2]: http://bit.ly/destroy-all-software [3]: http://bit.ly/clojure-koans [4]:
http://bit.ly/clojure-gist ========================================