5COP101 – Linguagens de Programação Aula 2 – Clojure/LISP 5COP101 Linguagens de Programação Aula 2 Clojure/LISP Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – [email protected] 1 5COP101 – Linguagens de Programação Aula 2 – Clojure/LISP Sumário 1) Razões para Estudar Clojure; 2) Obtendo a Clojure; 3) REPL; 4) Iniciando com a Clojure; Sylvio Barbon Jr – [email protected] 2 5COP101 – Linguagens de Programação Aula 2 – Clojure/LISP Razões para Estudar Clojure - A Clojure utiliza os recursos da JVM (Swing, SWT, “reliability”); - É um dos dialetos mais populares do LISP; - Foco em programação funcional em ambientes de desenvolvimento corporativo; - A Clojure oferece soluções de ambiente concorrentes e paralelização; - “Mistura” de Ruby + Python + Java + LISP Sylvio Barbon Jr – [email protected] 3 5COP101 – Linguagens de Programação Aula 2 – Clojure/LISP Obtendo a Clojure 1) Java Runtime 2) clojure-1.4.0.jar 3) IDE: Leiningen ou Eclipse * Versão atual é a 1.6 Sylvio Barbon Jr – [email protected] 4 5COP101 – Linguagens de Programação Aula 2 – Clojure/LISP REPL - Ambiente de híbrido de implementação e execução; - R: Read (código lido como entrada) - E: Eval (avaliação do código) - P: Print (saída da interpretação é escrita) - L: Loop (controles para retornar ao passo “read”) Sylvio Barbon Jr – [email protected] 5 5COP101 – Linguagens de Programação Aula 2 – Clojure/LISP Iniciando com a Clojure % java -cp clojure-1.4.0.jar clojure.main Clojure 1.4.0 user=> public static double average (double[] numbers) { double sum = 0; for (int i = 0; i < numbers.length; i++) { sum += numbers[i]; (defn average } [numbers] return sum / numbers.length; (/ (apply + numbers) (count } numbers)) (defn average [numbers] (/ (apply + numbers) (count numbers))) Sylvio Barbon Jr – [email protected] 6 5COP101 – Linguagens de Programação Aula 2 – Clojure/LISP Iniciando com a Clojure (average [60 80 100 400]) ;= 160 (println (average [60 80 100 400])) ; 160 ;= nil Sylvio Barbon Jr – [email protected] 7 5COP101 – Linguagens de Programação Aula 2 – Clojure/LISP Iniciando com a Clojure Sylvio Barbon Jr – [email protected] 8 5COP101 – Linguagens de Programação Aula 2 – Clojure/LISP Iniciando com a Clojure - Scalar Literals: – String: "hello there" ;= "hello there" – Booleans: true/false – nil: null (Java) – Characters: – Keywords: \o41 ;= \! (def person {:name "Sandra Cruz" :city "Portland, ME"}) ;= #'user/person (:city person) ;= "Portland, ME" Sylvio Barbon Jr – [email protected] 9 5COP101 – Linguagens de Programação Aula 2 – Clojure/LISP com -Iniciando Scalar Literals: – Symbols: – Numbers: a Clojure (average [60 80 100 400]) ;= 160 – Expressão Regular: (re-seq #"(\d+)-(\d+)" "1-3") ;= (["1-3" "1" "3"]) Sylvio Barbon Jr – [email protected] 10 5COP101 – Linguagens de Programação Aula 2 – Clojure/LISP Iniciando com a Clojure - Scalar Literals: – Comentário: “;” ou “#_(xxxxx)” – Espaço e vírgula: mesma função separar itens. (= [1 2 3] [1, 2, 3]) ;= true Sylvio Barbon Jr – [email protected] 11 5COP101 – Linguagens de Programação Aula 2 – Clojure/LISP Iniciando com a Clojure // Java public void hello(String name) { System.out.println("Hello, " + name); } ; Clojure (defn hello [name] (println "Hello," name)) Sylvio Barbon Jr – [email protected] 12 5COP101 – Linguagens de Programação Aula 2 – Clojure/LISP Referências 1- Sebesta, R. Conceitos de Linguagens de Programação. 5ª Edição. Porto Alegre. Bookman, 2003. 2 – Chas Emerick, Brian Carper, Christophe Gand, Clojure Programming., O'really, 2012.