Você está na página 1de 18

Clojure

Gabriel Cardoso de Faria Leonardo Cherobim Dutra

Introdução

O que é Clojure?

Clojure é uma linguagem de programação de propósito geral com ênfase em programação funcional.

Introdução

Executada na JVM

Sua execução se dá na maquina virtual java (JVM) por padrão, mas existem modos alternativos de execução da linguagem.

Introdução

Rich Hickey

É o criador da linguagem. Atualmente se limita a supervisão da comunidade de desenvolvimento do Clojure.

Introdução

Usos atuais do Clojure

Clojure é utilizada na industria por inúmeras empresas grandes, como Wallmart e Puppet Labs, entre outras do setor da computação.

Histórico

Clojure é uma linguagem recente

Com a versão beta lançada em 2007 e a primeira versão estável lançada em 2009 (1.0), poucas grandes mudanças foram feitas na linguagem, o que pode ser observado pela versão atual ser a 1.8.

Histórico

10/2007: Lançada a primeira versão beta;

05/2009: Lançada a primeira versão estável

(1.0);

12/2009: Adicionadas funções de Futures (1.1);

08/2010: Protocolos adicionados (1.2);

09/2011: Suporte melhorados a primitivos (1.3);

Histórico

04/2012: Adicionados Leitores literais(1.4);

03/2013: Redutores adicionados (1.5);

03/2014: Api Java e algoritmos de hash melhorados (1.6);

06/2015: Transdutores e leitores condicionais

(1.7);

01/2016: Funções Strings, link diretos e servidor de socket adicionados (1.8).

Características

Linguagem hospedeira

É executada por padrão na JVM, mas pode ser compilada também para outros ambientes de execução, como o .NET e JavaScript.

Características

Dialeto da linguagem LISP

Clojure é um Lisp-1 e não se destina a ser um código compatível com outros dialetos da linguagem Lisp, uma vez que utiliza o seu próprio conjunto de estruturas de dados não compatíveis com outros Lisps.

Características

Linguagem funcional

Clojure usa funções de primeira classe sem efeitos colaterais, evita o estado mutável e enfatiza a iteração recursiva.

Características

Programação concorrente

Todas as bibliotecas disponíveis em Java para manipulação de threads podem ser utilizadas em Clojure. Além dessas a linguagem define algumas construções que abstraem a criação e o gerenciamento explicito de threads.

Principais comandos

def

Usado para definição de variáveis. Ex.:

(def n 5) define a variável n com o valor 5

defn

Usado para definição de funções. Ex.:

(defn media [x y] (/ (+ x y) 2))

Principais comandos

if

Estrutura de condição. Ex.:

(if (= denominador 0)

“Denominador inválido” se verdadeira

(/ 1 denominador))

expressão

se falsa

Principais comandos

loop e recur

Estrutura de repetição. Ex.:

(def fatorial

(fn [n]

(loop [cnt n acc 1]

(if (= cnt 1)

acc

(recur (dec cnt) (* acc cnt))))))

Exemplos de programas

(def somatorio

(fn [lista]

(loop [ns lista acc 0]

(if (empty? ns)

acc

(recur (rest ns) (+ acc (first ns)))))))

Exemplos de programas

(def fibonacci

(fn [n]

(loop [num n acc [1 0] ]

(if (= num 2)

acc

(recur (dec num)

(concat (+ (first acc) (first (rest acc))) acc))))))

(concat (+ (first acc) (first (rest acc))) acc))))))

Exemplos de programas

https://clojure.org/index

http://dev.clojure.org/display/community/Home

https://en.wikipedia.org/wiki/Clojure

http://www.braveclojure.com/introduction/

https://mauricioszabo.wordpress.

com/2016/04/19/clojure-gentilmente/

http://clojure.org/reference/