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
Introduction to Clojure
Search
Pablo Tamarit
October 30, 2012
Programming
82
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Introduction to Clojure
Pablo Tamarit
October 30, 2012
More Decks by Pablo Tamarit
See All by Pablo Tamarit
From Bash to Z shell in 5 min
ptamarit
1
92
Introduction à Clojure
ptamarit
0
98
Other Decks in Programming
See All in Programming
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
570
TiDB Cloudのカスタムコントローラーによるオートスケール対応
takaidohigasi
0
130
AGENTS.md Is Not Enough:Build Skills, Don't Download Them
lx_t
0
120
JPUG勉強会 OSSデータベースの内部構造を理解しよう(第2回)
oga5
0
260
Heart of Swift Concurrency
koher
0
910
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
1
150
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
2k
Building an Out-of-Order CPU
latte72
1
790
wkhtmltopdfの次どうするか問題2026
willnet
2
1.5k
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
190
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
2k
スマート反転とウェブアクセシビリティ
camiha
0
210
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Google's AI Overviews - The New Search
badams
0
1.6k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
280
Paper Plane
katiecoart
PRO
4
53k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
760
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
410
The browser strikes back
jonoalderson
0
1.7k
Building the Perfect Custom Keyboard
takai
2
880
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
360
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
240
Transcript
Introduction to Clojure Pablo Tamarit October 30, 2012 GenevaJUG
? 2000 2001 2002 2003 2004 2005 2006 2007 2008
2009 2010 2011 2012 1999 - 2005 EIG 2007 - 2049 CERN
(def basket [{:name "apples", :type :fruits} {:name "pears", :type :fruits}
{:name "scoubidous", :type :objects}]) (group-by :type basket) {:fruits [{:type :fruits, :name "apples"} {:type :fruits, :name "pears"}], :objects [{:type :objects, :name "scoubidous"}]} Sampling
• Philosophical part • Theoretical part • Practical part
Philosophical part
Clojure • Created in 2007 • Simplicity • Not object
oriented! • Dynamic typing • Everything is immutable • No state • No side effects • Dialect of Lisp! + λ
Lisp • Invented in 1958
John McCarthy 1927 – 2011
Lisp • Invented in 1958 • Lots of Irritating Superfluous
Parentheses?
Lisp • Invented in 1958 • Lots of Irritating Superfluous
Parentheses • Homoiconicity • Macros paulgraham.com/avg.html
Theoretical part
Language • Simple syntax, rich vocabulary. – Syntax: data, functions
– Vocabulary: functions clojure.org/cheatsheet
Syntax: collections List ("one" 2 3 3) Vector ["one" 2
3 3] Set #{"one" 2 3} Map {:name "Pablo", :age 28} (:age {:name "Pablo", :age 28}) 28
Syntax: functions Call (+ 1 2 3) Definition (defn abs
[n] (if (neg? n) (- n) n)) Anonymous definition (fn [x y] (+ (abs x) (abs y))) Sugared anonymous definition #(+ (abs %1) (abs %2)) condition then else vector list fn args
Vocabulary: functions (def coll [-42 5 -0.1]) (map abs coll)
(42 5 0.1) (reduce + 0 coll) -37.1 (filter neg? coll) (-42 -0.1)
Interop Java Clojure new JFrame("Titre") (JFrame. "Titre") Color.RED Color/RED frame.setTitle("Titre2")
(.setTitle frame "Titre2") frame.getTitle().toLowerCase() (.. frame getTitle toLowerCase) frame.add(panel) frame.pack() frame.setVisible(true) (doto frame (.add panel) (.pack) (.setVisible true)) 2 4 1 3
Practical part
What to install? • Nothing! <dependency> <groupId>org.clojure</groupId> <artifactId>clojure</artifactId> <version>1.4.0</version> </dependency>
• What’s in the JAR? – The library – REPL: java -jar clojure.jar – Compiler: .clj .class
Tools • Build – leiningen – clojure-maven-plugin • IDE –
Counterclockwise (Eclipse) – La Clojure (IntelliJ IDEA) – Emacs!
Resources • Presentations: – blip.tv/clojure – infoq.com/clojure • Books: –
clojurebook.com – joyofclojure.com • Exercises: – 4clojure.com
Questions?
Image credits • Clojure logo: © Tom Hickey (tomhickey.com) •
Aerial view of the LHC: © 2001 CERN (cdsweb.cern.ch/record/42370) • The Treachery of Images: © 1929 René Magritte • Duke models: © Sun Microsystems Inc. (duke.kenai.com/models) • Portrait of John McCarthy: © 2006 null0 (flic.kr/p/q39Sg) • The Call of the Peaks: © 1942 René Magritte • Clairvoyance: © 1936 René Magritte • Cooled Beans: © 2008 Chris Bay (flic.kr/p/4z6CBA) • Gears: © Dima Yagnyuk (thenounproject.com/noun/gears/#icon- No2174, thenounproject.com/Deadtype) • Tools: © Jacob Hardbower (thenounproject.com/noun/tools/#icon- No4684, thenounproject.com/HeartWired)