terça-feira, 7 de junho de 2011

Usando map para formar... maps

Minha primeira function =)

Map necessita de uma função unária e uma sequence de dados para serem transformados pela função.

Seu uso seria algo assim então:


(map as-album-map sequence-of-albums)


a definição de as-album-map poderia então ser assim:


(defn as-album-map [album-data]
{ :year (get album-data 0)
:title (get album-data 1)
:artist (get album-data 2) })


e sequence-of-albums pode ser uma sequence definida a partir da função load-album-sequence:


(defn load-album-sequence [file-name]
(binding [*delimiter* \;] (parse-csv (char-seq (reader file-name))))))

(def sequence-of-albums (load-album-sequence "resources/1001_Albums.csv"))


Alterando então o arquivo core.clj do projeto, fica exatamente assim:


(ns a-thousand-things-to-do.core)
(use '[clojure.java.io :only (reader)])
(use '[clojure-csv.core])

(defn as-album-map [album-data]
{ :year (get album-data 0)
:title (get album-data 1)
:artist (get album-data 2) })

(defn load-album-sequence [file-name]
(binding [*delimiter* \;]
(parse-csv (char-seq (reader file-name)))))


Alterei project.clj para apontar core como o arquivo principal. Ficou assim:


(defproject a-thousand-things-to-do "1.0.0-SNAPSHOT"
:description "My first experiments with Clojure"
:dependencies [[org.clojure/clojure "1.2.1"]
[clojure-csv "1.2.4"]]
:main a-thousand-things-to-do.core)


Carregando para o REPL

crisweber$ lein repl


E finalmente testando:


(map as-album-map (load-album-sequence "resources/1001_Albums.csv")


e funcionou =)

Updated 7 jun 2001 ===> SVN Atualizado!

Nenhum comentário:

Postar um comentário