Clojure for Beginners

Clojure for Beginners

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>

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    98 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us