Install Leiningen

https://leiningen.org/



lein new cl1

cd cl1

Edita project.clj



(defproject cl1 "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies "1.8.0"

:aot [cl1.core]
:main cl1.core
)

Edita src/cl1/core.clj


(ns cl1.core)

(defn f [x] (* x x x))

(defn -main [& args]
(println (map f (range 100)))
)

Executar


lein run

Ou no repl


lein repl

(load "core")

(in-ns "cl1.core")

(map f (range 100))

Exercício 9

  • 9.1 - Cria um arquivo chamada "teste.csv"
mes, banana, laranja, pera
jan, 432, 542, 564
fev, 52, 46, 874
mar, 434, 54, 76
abr, 345, 342, 655
mai, 53, 32, 54
jun, 764, 453, 734

Lendo arquivos

Le um arquivo com slurp



(slurp "teste.csv")

Podemos cortar as strings com split



(split "algumas palavras separadas pelas espacos" #"")

Obs : #" " 'e notacao de expressoes regulares (Regex) que sao utilizadas pela split.

Podemos ler um arquivo CSV e convertar pra um estrutura de dados representando uma tabela assim :



(defn tab [t]
(let [lines (str/split t #"\n")
dadas (rest lines)
f-linha (fn [l] (let [xs (str/split l #",\s+")]
{:mes (first xs) :d (rest xs)}))]
{:heads (first lines)
:linhas (map f-linha dadas)})
)

(defn -main [& args]
(let [data (slurp "teste.csv")
tabulo (tab data)
]
(println tabulo))
)

  • 9.1a - Atualizar sua programa como este exemplo acima e comprovar voce pode imprimir seu arquivo.csv
  • 9.2 - Adicionar um funciao pra imprimir o tabelo em HTML eg.

<table>
<tr><th>mes</th><th>banana</th> ... </tr>
<tr><td>jam</td>
...

</table>
  • 9.3 - Crie uma funçião que, quando dada uma tabela, calcula a soma e a média de cada coluna. (Se voce preferir reorganizar seu representacao da tabela fica a vontage)

  • 9.4 - Pode adicionar funciones pra calcular o máximo e mínimo dos colunas.

Exploracao de dados abertos

  • 9.5 - Procura alguma arquivo CSV interesante no http://dados.gov.br/ baixa, escreve um programa que fazer alguma analysis destes dados.

Proxima