
Clojure for Beginners Elango Cheran June 22, 2013 Clojure for Get ClojureI Beginners Elango Cheran Introduction Setup Overview Preview I Clojure (actually) implemented as a Java library Language Overview I Need standard (Sun/Oracle) Java 1.6+ - Clojure Basics & Comparisons http://www.oracle.com/technetwork/java/ Tabular comparisons Clojure Code Building javase/downloads/index.html Blocks I Clojure JAR downloads - Clojure Design http://clojure.org/downloads Ideas Conclusion I Can run the REPL (\interpreter") with Extras java -cp clojure-1.6.0.jar clojure.main Cascalog I Try Clojure - online vanilla REPL - http://tryclj.com/ Clojure for Get ClojureII Beginners Elango Cheran Introduction Setup Overview Preview I Leiningen - de facto build tool - Language http://leiningen.org/ Overview Clojure Basics & I New project - lein new <project name> Comparisons Tabular comparisons I Open a REPL - lein repl Clojure Code Building Blocks I The REPL from Leiningen maintains proj. libs Clojure Design (classpath), command history, built-in docs, etc. Ideas Conclusion I So easy that you don't notice Maven is underneath Extras I Light Table - evolving instant-feedback IDE - Cascalog http://www.lighttable.com/ Clojure for \Traditional" IDEs for ClojureI Beginners Elango Cheran Introduction Setup Overview I Emacs (!) Preview Language I Paredit mode - one unique advtange of Lisp syntax Overview Clojure Basics & I Imbalanced parenthases (& unclosed strings) no longer Comparisons Tabular comparisons possible Clojure Code Building Blocks I Editing code structure as natural as editing code Clojure Design I Integrated REPL, lightweight editor, etc. Ideas I Get Emacs 24 or later, and install emacs-starter-kit Conclusion I Eclipse + Counterclockwise Extras Cascalog I \Strict Structural Edit Mode" is steadily replicating Paredit mode I Vi, IntelliJ, etc. Clojure for \Traditional" IDEs for ClojureII Beginners Elango Cheran Introduction Setup Overview Preview Shortcuts to learn (and my configurations) Language Overview Clojure Basics & paredit-forward (C-M-f), paredit-backward (C-M-b), Comparisons Tabular comparisons paredit-forward-slurp-sexp (C-<right>), Clojure Code Building paredit-forward-barf-sexp (C-<left>), Blocks Clojure Design paredit-backward-slurp-sexp (C-M-<left>), Ideas paredit-backward (C-M-<right>), Conclusion paredit-backward (C-M-b), paredit-backward (C-M-b), Extras Cascalog paredit-split-sexp (M-S), and there's more . Clojure for What This Presentation Covers Beginners Elango Cheran Introduction Setup Overview Preview Language Overview Clojure Basics & I An introduction to Clojure Comparisons Tabular comparisons Clojure Code Building I A cursory comparison of Java, Clojure, Ruby, and Scala Blocks I Code snippets as needed Clojure Design Ideas I Explanation of design considerations Conclusion I Additional resources Extras Cascalog Clojure for Interesting Things Not Covered Beginners Elango Cheran Introduction Setup Overview Preview Language Overview Clojure Basics & Comparisons Tabular comparisons I ClojureScript Clojure Code Building Blocks I Specific DSLs & frameworks Clojure Design Ideas I Clojure's concurrency constructs & STM Conclusion Extras Cascalog Clojure for Overview of Presentation Beginners Elango Cheran Introduction Setup Overview Preview Language Overview Clojure Basics & Comparisons I Brief intro of Clojure dev tools Tabular comparisons Clojure Code Building I Brief comparison of languages w/ snippets Blocks Clojure Design I Explanation of main Clojure concepts Ideas Conclusion I Hands-on example(s) Extras Cascalog 2. Open, use, and close multiple system resources 3. Filter all lines of a file based on a reg. exp. 4. Read in a line, skip first line, take every 3rd Clojure for Teasers Beginners Elango Cheran Introduction Setup Overview Preview Language Overview Clojure Basics & Comparisons 1. Average all numbers in a list Tabular comparisons Clojure Code Building Blocks Clojure Design Ideas Conclusion Extras Cascalog 3. Filter all lines of a file based on a reg. exp. 4. Read in a line, skip first line, take every 3rd Clojure for Teasers Beginners Elango Cheran Introduction Setup Overview Preview Language Overview Clojure Basics & Comparisons 1. Average all numbers in a list Tabular comparisons Clojure Code Building 2. Open, use, and close multiple system resources Blocks Clojure Design Ideas Conclusion Extras Cascalog 4. Read in a line, skip first line, take every 3rd Clojure for Teasers Beginners Elango Cheran Introduction Setup Overview Preview Language Overview Clojure Basics & Comparisons 1. Average all numbers in a list Tabular comparisons Clojure Code Building 2. Open, use, and close multiple system resources Blocks Clojure Design 3. Filter all lines of a file based on a reg. exp. Ideas Conclusion Extras Cascalog Clojure for Teasers Beginners Elango Cheran Introduction Setup Overview Preview Language Overview Clojure Basics & Comparisons 1. Average all numbers in a list Tabular comparisons Clojure Code Building 2. Open, use, and close multiple system resources Blocks Clojure Design 3. Filter all lines of a file based on a reg. exp. Ideas 4. Read in a line, skip first line, take every 3rd Conclusion Extras Cascalog Clojure for Teaser #1 Beginners Elango Cheran I Idea: Average all numbers in a list Introduction I Java Setup // int[] nums = f8, 6, 7, 5, 3, 0, 9g; Overview Preview float average(int[] nums) f Language float sum = 0.0; Overview Clojure Basics & for(intx : nums) f Comparisons Tabular comparisons sum += x; Clojure Code Building g Blocks Clojure Design return sum / nums.length; Ideas g Conclusion Extras I Clojure Cascalog ; (def nums [8 6 7 5 3 0 9]) (defn average[nums] (/(reduce + nums)(count nums))) I All values in input Java array, etc. must be of same type I Unless you use an untyped Java collection ::: I ::: and pre-emptively cast to float Clojure for Teaser #2I Beginners Elango Cheran Introduction Setup I Idea: Open, use, and close multiple system resources Overview Preview I Java Language Sockets= new Socket("http://tryclj.com/", 80); Overview Clojure Basics & Comparisons OutputStream fos= new Tabular comparisons Clojure Code Building FileOutputStream("index copy.html"); Blocks PrintWriter out= new PrintWriter(fos); Clojure Design try f Ideas // do stuff... Conclusion g Extras finally f Cascalog out.close(); fos.close(); s.close(); g Clojure for Teaser #2II Beginners Elango Cheran Introduction Setup Overview I Clojure Preview (with-open [s(Socket. "http://tryclj.com" 80) Language fos(FileOutputStream. Overview Clojure Basics & "index copy.html") Comparisons Tabular comparisons out(PrintWriter. fos)] Clojure Code Building Blocks ;; do stuff Clojure Design ) Ideas Conclusion I The predictable parts: Extras I .close() Cascalog I Close in reverse order I A try-catch-finally block for clean I/O usage Clojure for Teaser #3 Beginners Elango Cheran I Idea: Filter all lines of a file based on a reg. exp. Introduction Setup I Java Overview BufferedReader br= new BufferedReader(new Preview Language FileReader(file)); Overview String line; Clojure Basics & Comparisons while ((line = br.readLine()) != null) f Tabular comparisons Clojure Code Building if (line.matches("nndf3g-nndf3g-nndf4g")) f Blocks System.out.println(line); Clojure Design Ideas g g Conclusion Extras br.close(); Cascalog I Clojure (with-open [br(BufferedReader. (clojure.java.io/reader file))] (doseq [line(line-seq br)] (when(re-matches#" ndf3g-ndf3g-ndf4g" line) (println line)))) Clojure for Teaser #4 Beginners Elango Cheran Introduction I Idea: Read in a line, skip first line, take every 3rd Setup Overview Preview I Java Language String line; Overview Clojure Basics & int counter = 0; Comparisons Tabular comparisons br.readLine(); // assume not EOF Clojure Code Building while ((line = br.readLine()) != null) f Blocks Clojure Design if (counter % 3 == 0) f Ideas System.out.println(line); Conclusion g Extras counter++; Cascalog g I Clojure (doseq [line(take-nth3(rest(line-seq br)))] (println line)) Clojure for REPL Beginners Elango Cheran Introduction Setup Overview I REPL = Read-Eval-Print Loop Preview Language I \Interactive interpreter" Overview Clojure Basics & Comparisons I user> 1 Tabular comparisons Clojure Code Building 1 Blocks user> 4.5 Clojure Design Ideas 4.5 Conclusion I Also try 22/7, ne, 10000000000000000000, first, str, +, Extras 2r10101010, "hello", Cascalog 0.000000000000000000000000314, [2 4 8], f"key""value"g Clojure for BindingsI Beginners Elango Cheran Introduction Setup I \binding" = assigning a value to a symbol Overview Preview I Clojure promotes alternative ways to manage state, and Language \variable" would be misleading Overview Clojure Basics & Comparisons I In general Tabular comparisons Clojure Code Building I Bindings are made at diff. times w.r.t. compiling (static Blocks / dynamic) Clojure Design Ideas I Bindings are made within a context (lexical / dynamic scope) Conclusion Extras I Clojure is dynamic (uses dynamic bindings) Cascalog I Clojure promotes lexical scoping, allows easy dynamic scoping I You can \hot swap" live code I Lexical scope + a function = a closure Clojure for BindingsII Beginners Elango Cheran I Clojure Introduction Setup user> (def a 3) Overview Preview #'user/a Language user> a Overview Clojure Basics & Comparisons 3 Tabular comparisons Clojure Code Building user> (def b 5) Blocks #'user/b Clojure Design Ideas user> b Conclusion 5 Extras Cascalog I Java inta = 3; a; intb = 5; b; Clojure for Bindings III Beginners Elango Cheran I Ruby irb(main):001:0> a = 3 Introduction Setup 3 Overview irb(main):002:0>
Details
-
File Typepdf
-
Upload Time-
-
Content LanguagesEnglish
-
Upload UserAnonymous/Not logged-in
-
File Pages98 Page
-
File Size-