(defn sum-even-numbers [nums] (if-let [nums (seq (filter even? nums))] (reduce + nums) "No even numbers found."))">

A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

5COP101 – Linguagens de Programação Aula 3 – Clojure/LISP 5COP101 Linguagens de Programação Aula 3 Clojure/LISP Prof. Dr. Sylvio Barbon Junior 1Sylvio.

Apresentações semelhantes


Apresentação em tema: "5COP101 – Linguagens de Programação Aula 3 – Clojure/LISP 5COP101 Linguagens de Programação Aula 3 Clojure/LISP Prof. Dr. Sylvio Barbon Junior 1Sylvio."— Transcrição da apresentação:

1 5COP101 – Linguagens de Programação Aula 3 – Clojure/LISP 5COP101 Linguagens de Programação Aula 3 Clojure/LISP Prof. Dr. Sylvio Barbon Junior 1Sylvio Barbon Jr –

2 5COP101 – Linguagens de Programação Aula 3 – Clojure/LISP Sumário 2Sylvio Barbon Jr – 1) Controle de Fluxo 2)Funções Recursivas com a Clojure 3) Coleções e Estruturas de Dados

3 5COP101 – Linguagens de Programação Aula 3 – Clojure/LISP Controle de Fluxo 3Sylvio Barbon Jr – - if - if-not (Se a lógica for falsa) - if-let (Se o teste for verdade os valores dos testes são “amarrados”) (defn is-small? [number] (if (< number 100) "yes" "no")) (defn has-neg [coll] (if-not (empty? coll) ;; = (if (not (empty? coll))... (or (neg? (first coll)) (recur (rest coll))))) user=> (defn sum-even-numbers [nums] (if-let [nums (seq (filter even? nums))] (reduce + nums) "No even numbers found."))

4 5COP101 – Linguagens de Programação Aula 3 – Clojure/LISP Controle de Fluxo 4Sylvio Barbon Jr – - when ( Se for verdade executa um do “implícito”, apresenta as variações when-not e when-let) (when (= 1 1) true) (defn drop-one [coll] (when-let [s (seq coll)] (rest s))) (do (println "LOG: Computing...") (+ 1 1)) - do (Avalia múltiplas expressões em ordem e retorna o valor da última expressão)

5 5COP101 – Linguagens de Programação Aula 3 – Clojure/LISP Controle de Fluxo 5Sylvio Barbon Jr – - loop (constrói uma estrutura recursiva) (loop [x 10] (when (> x 1) (println x) (recur (- x 2)))) (defn my-re-seq [re string] "Something like re-seq" (let [matcher (re-matcher re string)] (loop [match (re-find matcher) result []] (if-not match result (recur (re-find matcher) (conj result match)))))) user=> (my-re-seq #"\d" " ") ["0" "1" "2" "3" "4" "5" "6" "7" "8" "9"]

6 5COP101 – Linguagens de Programação Aula 3 – Clojure/LISP Controle de Fluxo 6Sylvio Barbon Jr – user=> (def a (atom 10)) #'user/a user=> (while (do (swap! a dec))) - while (Executa o escopo repetidamente enquanto for true)

7 5COP101 – Linguagens de Programação Aula 3 – Clojure/LISP Recursão 7Sylvio Barbon Jr – - A recursão pode ser implementada, como tradicionalmente, tendo a função invocando ela mesma até que seja atingido um critério de parada. - Para evitar eventuais sobrecargas na pilha pode-se utilizar a função recur (defn count-down [n] (if-not (zero? n) (do (if (= 0 (rem n 10)) (println "count-down:" n)) (count-down (dec n))))) (defn count-downr [n] (if-not (zero? n) (do (if (= 0 (rem n 100)) (println "count-down:" n)) (recur (dec n)))))

8 5COP101 – Linguagens de Programação Aula 3 – Clojure/LISP Coleções e Estruturas de Dados 8Sylvio Barbon Jr – user=> (count [1 2 3]) 3 user=> (contains? {:a 1} :a) true user=> (sorted? [ ]) false user=> (sorted? (sorted-map :a 1 :c 3 :b 2)) true - count: retorna o número de itens de uma coleção - empty: retorna uma mesma coleção vazia - contains?: retorna true se a chave está presente na coleção - distinct?: retorna true se dois argumentos são iguais - emplty?: retorna true se a coleção não tem itens - senquential?, associative?, sorted?, counted? e reversible? : retornam se os itens são de respectivas classes.

9 5COP101 – Linguagens de Programação Aula 3 – Clojure/LISP Coleções e Estruturas de Dados 9Sylvio Barbon Jr – (def p #{1, 2, 3}) - Set é uma coleção de valores únicos; - Set apresenta os métodos: union, intersection e difference. (def a #{1, 2, 3, 4}) (def b #{1, 3, 5}) user=> (clojure.set/union a b) #{ } user=> (clojure.set/intersection a b) #{1 3} user=> (clojure.set/difference a b) #{2 4}

10 5COP101 – Linguagens de Programação Aula 3 – Clojure/LISP Coleções e Estruturas de Dados 10Sylvio Barbon Jr – user=> (repeat 10 “a”) ;; (“a” “a” “a” “a” “a” “a” “a” “a” “a” “a”) - Sequence é uma lista com n cópias de um objeto; - Algumas funções úteis com sequences: rand-int, concat, cycle, rand e iterate user=> (def aleatorios (repeatedly #(rand-int 100))) user=> (concat [1 3 ] [ 3 4 3] [3 3]) ;; ( ) user=> (def x (cycle [1 2 3])) ;; lista infinita ;; ( ) user=> (def inteiros (interate inc 0)) (take 4 inteiros) ;; => ( )

11 5COP101 – Linguagens de Programação Aula 3 – Clojure/LISP Referências

12 5COP101 – Linguagens de Programação Aula 3 – Clojure/LISP Referências 1- Sebesta, R. Conceitos de Linguagens de Programação. 5ª Edição. Porto Alegre. Bookman, – Chas Emerick, Brian Carper, Christophe Gand, Clojure Programming., O'really, 2012.


Carregar ppt "5COP101 – Linguagens de Programação Aula 3 – Clojure/LISP 5COP101 Linguagens de Programação Aula 3 Clojure/LISP Prof. Dr. Sylvio Barbon Junior 1Sylvio."

Apresentações semelhantes


Anúncios Google