You are on page 1of 18

Linguagem de Programação

LISP

PDF gerado usando o pacote de ferramentas em código aberto mwlib. Veja http://code.pediapress.com/ para mais informações.
PDF generated at: Thu, 21 Oct 2010 09:46:16 UTC

Licenças e Editores da Imagem 15 Licenças das páginas Licença 16 .Conteúdo Páginas Lisp 1 Common Lisp 7 Scheme 9 Clojure 12 Referências Fontes e Editores da Página 14 Fontes.

Durante os anos de 1970 e 1980. DEC PDP-6 e DEC PDP-10. procedural. Scheme. Arc. O computador PDP-10 e seu antecessor. Dylan Lisp é uma família de linguagens de programação concebida por John McCarthy em 1958. Emacs Lisp. O dialeto principal entre 1960 e 1965 foi o Lisp 1. O seu nome vem de LISt Processing (a lista é a estrutura de dados fundamental desta linguagem). em instruções simples extraíam o seu car e cdr. Apesar das primeiras implementações do Lisp terem sido realizados nos IBM 704 e 7090. Newlisp. que proporcionavam rápida chamada a funções.um computador dedicado especialmente à tarefa de trabalhar com a linguagem. Esses computadores possuíam também poderosas instruções de pilha. especialmente adequados para o Lisp. Esforços para a implementação de seus primeiros dialetos foram empreendidos no IBM 704. linguagens interpretadas e programação funcional. Uma resposta para o problema de endereçamento foi o desenvolvimento do "Lisp Machine". desenvolvidos através de esforços anteriores: MacLisp e Interlisp. Clojure. como o DEC VAX e o S1 Mark IIA. porém suas limitações em 1973 eram evidentes: suportavam um pequeno número de pesquisadores utilizando o Lisp e seu endereçamento em 18 bits limitava o espaço dos programas. A primeira implementação da linguagem se dá no inverno de 1958. Lush. tendo sido pioneiro em aplicações como administração automática de armazenamento. Smalltalk. . por possuirem palavras de 36 bits e endereços de 18 bits. ele mostra que é possível usar exclusivamente funções matemáticas como estruturas de dados elementares (o que é possível a partir do momento em que há um mecanismo formal para manipular funções: o Cálculo Lambda de Alonzo Church). Esta arquitetura permitia um registro de um cons cell (par pontuado) em uma única palavra de memória. Num célebre artigo. Arc Influenciou Logo. Tanto os dados como o programa são representados como listas.[1] A motivação de McCarthy surgiu da idéia de desenvolver uma linguagem algébrica para processamento de listas para trabalho em IA (inteligência artificial). durante um projeto de pesquisa em inteligência artificial. houve outros dois dialetos predominantes. o PDP-6 eram por definição.Lisp 1 Lisp Lisp Paradigma multiparadigma: funcional. História Lisp é uma família de linguagens que possui uma longa história. o que permite que a linguagem manipule o código fonte como qualquer outro tipo de dados.No início dos anos 1970. IBM 7090. sendo os mais conhecidos o Common Lisp e o Scheme. Autolisp. Outra solução foi a utilização de computadores de uso geral com maior capacidade de endereçamento. Existem diversos dialetos de Lisp. DEC PDP-1. orientada a objetos Surgido em 1958 Criado por John McCarthy Compiladores internos Dialetos: Common Lisp.5. trabalhos posteriores concentraram-se nos DEC PDP-6 e PDP-10. Lisp se tornou a principal linguagem da comunidade de inteligência artificial. este último sendo o baluarte do Lisp e das pesquisas em IA (inteligência artificial) em lugares como o MIT (Massachussets Institute of Tecnology) e as Universidades de Stanford e Carnegie-Mellon até metade dos anos 1970. As primeiras idéias-chave para a linguagem foram desenvolvidas por John McCarthy em 1956. Ruby.

as linguagens funcionais intrinsecamente nos oferecem oportunidades para a concorrência: A partir do momento em que uma função tem mais de um parâmetro. engenharia. estes parâmetros devem em princípio ser avaliados simultaneamente (note que os parâmetros seriam as funções correspondentes às tarefas a serem executadas). é fracamente tipado. Uma das grandes vantagens de Lisp é que ela trata o programa como dado. Esta característica de avaliação independente da ordem torna as linguagens funcionais as mais indicadas para a programação de computadores maciçamente paralelos. • Concorrência (multitarefa): A concorrência nas linguagens imperativas tradicionais é relativamente complexa. linguagem de força industrial com a qual desenvolvedores sérios em todo o mundo contam para: • Ferramenta rápida e altamente personalizável para fazer coisas do dia a dia. • Avaliação Ociosa: É o que ocorre quando uma função aninhada executa uma computação desnecessária para a avaliação da função que a chama. processamento de documentos. portanto. o que causa complicações. pois livra o programador da necessidade de alocar espaços diferentes para o programa e para os dados. A estrutura de utilização da memória disponível é na forma de listas. ou apenas o motor de processamento interno. suprimindo muitos detalhes da programação e minimizando a probabilidade da ocorrência de muitas classes de erros. o programador é o responsável pela sincronização de todas as tarefas (a multitarefa no paradigma procedural é tão sofisticada quanto um GOTO). e ainda é usada com rotina para prover linguagens de comando interativas. onde o usuário digita expressões em uma linguagem formal definida e recebe de volta a avaliação de sua expressão. • Aplicações grandes. aumentando o tempo de execução. altamente portável. As expressões são de tamanho indefinido e tem uma estrutura de árvore binária. já que operações que acessam as suas estruturas de dados são tratadas como funções. Deste ponto de vista podemos pensar no LISP como uma calculadora. Cada programa em LISP. • Fraca Tipagem: LISP. Suas principais características são: • Tipos de dados: átomo e a lista. gráficos e animação (Mirai). característica única da linguagem LISP. E usada algumas vezes para definir todos os aspectos de uma aplicação. é. É com apenas esses dois tipos de dados que se constroem as expressões-S. possibilitando assim um programa inteiro ser dado como entrada de um outro. as linguagens funcionais orientadas a multitarefa permitem ao programador trabalhar em um nível muito mais elevado do que as linguagens imperativas destinadas a este mesmo fim. • Prototipação rápida e Rapid Application Development (RAD). • Um alto nível de abstração. uma expressão. fazendo com que os dados e os programas sejam homogêneos. A linguagem teve um grande sucesso em software do ramo de negócios. Características Técnicas A linguagem LISP é interpretada. ou apenas a interface do usuário. • Funções de ordem elevada: Linguagens funcionais tipicamente suportam funções de ordem elevada (exemplo: função de uma função de uma função de uma…). • A não dependência das operações de atribuição permite aos programas avaliações nas mais diferentes ordens. Todavia. • Aplicações de alta disponibilidade. inteligência artificial e processamento de linguagem natural. hipermídia (incluindo a Web). complexas e críticas as quais seriam impossíveis desenvolver em outra linguagem. principalmente aquelas que necessitam de mudanças após a etapa inicial. Em contraste.Lisp 2 Aplicabilidade Lisp é uma linguagem madura. matemática. coisa que não acontece em outras linguagens como C e Pascal. que ao invés de avaliar expressões aritméticas avalia expressões simbólicas. as estruturas basilares de LISP. chamadas de expressões. concebida atenciosamente. . a responsabilidade pela sincronização das tarefas passa do programador para o compilador (as modernas linguagens funcionais orientadas a multitarefa dispõe de mecanismos através dos quais o programador pode guiar o compilador). A partir deste ponto. linguagens de macro ou script e linguagens extensoras de sistemas comerciais. em relação a outras linguagens funcionais mais recentes. especialmente quando as funções são utilizadas.

ou então LISP = Linguagem Infernal Somente de Parênteses. binários e decimais. ] | | | +---. são funções. ou alfanumérico. um programa Lisp pode confundir um programador inexperiente porque requer o uso de muitos parênteses. Exemplos de átomos: atomo1. ] +→[ . Exemplo de lista: (esta lista contém 5 átomos) ((jose (22 solteiro)) (antonio (15 casado))) Normalmente a implementação de uma lista é um encadeamento de pares em que o ponteiro à esquerda do par aponta para o elemento correspondente da lista e em que o ponteiro à direita do par aponta para a restante lista. 54. octais. quando avaliadas. [ . bola. contas de banco) ou muitas atividades seqüenciais são muitas vezes mais fáceis de se trabalhar com programas procedurais ou programas orientados a objeto. O átomo nil representa o valor nulo e ao mesmo tempo representa uma lista vazia. . ] +→[ .ponteiro para a restante lista (quando for o último. As listas. Estas representações podem ser divididas em 4 tipos: hexadecimais. O Common Lisp permite várias representações diferentes de números. E como desvantagem. ] | | | | | | | | | | | | | | | +---+ | +---+ | +---+ | +---+ | +--> nil esta lista contém 5 átomos Avaliação dados: os átomos quando avaliados retornam eles mesmos.ponteiro para o conteúdo do elemento [ . ] +→[ . ] +→[ .Lisp 3 • A ausência de operações de atribuição torna os programas funcionais muito mais simples para provas e análises matemáticas do que os programas procedurais. a. em Lisp havia duas estruturas de dados fundamentais: o átomo e a lista. nil. Os exemplos acima apresentam a interacção com uma implementação de Lisp. as implementações de Lisp providenciam um ambiente interactivo de avaliação de expressões. onde o primeiro elemento representa o nome da função e os elementos seguintes são os argumentos para esta função. Exemplos de função: (+ 3 4) >7 (* 5 (+ 2 5)) > 35 (car (quote (a b))) >a Normalmente. Implementação das Listas Originalmente. ponto flutuante e complexos. Estes últimos podem ser divididos em 4 categorias: inteiros. Como pode ser visto também. o átomo pode ser numérico. 12. A lista é a associação de átomos ou outras listas (numa lista chamamos de elementos a cada um dos itens) representandos entre parêntesis. destacamos: • Uma menor eficiência para resolver problemas que envolvam muitas variáveis (ex. o que lhe rendeu um trocadilho anglófono para o nome da linguagem: LISP = Lots of Irritating Stupid Parentheses (tradução: Montes de Irritantes Parênteses Estúpidos). racionais. aponta para nil) +-------.

(eval expressão) força a avaliar a expressão. (car lista) Retorna o primeiro elemento da lista. Na realidade. para invocar programas compilados a partir de código escrito por um programador. o Macsyma. pois estas somente fazem substituição de texto. As macros são completamente diferentes das que se encontram em C. todos os dialetos relevantes de Lisp têm compiladores. (Subtração) * (Multiplicação) / (Divisão) Macros O grande diferencial de Lisp são as macros. Há dialetos que usam o nome rest como alternativa para cdr. enquanto que em Lisp as macros são programas que geram programas. há alguns (por exemplo. Exemplos de Funções (quote expressão) Retorna a expressão diretamente. Ex: 'jose retorna jose. pois o fato da linguagem de extensão dele ser tão poderosa permite que ele seja estendido muito além do que se imaginava que ele originalmente poderia fazer. e '(jose silva) retorna (jose silva). A ITA software desenvolveu um sistema de reserva de passagens chamado Orbitz em LISP. 'expressão Significa o mesmo que (quote expressão). Ele também é utilizado como linguagem de extensão do software de CAD AutoCAD. Segundo o seu próprio autor. Richard Stallman. o compilador é uma função que se pode invocar a partir de código normal para transformar uma lista (que descreve uma função) numa função invocável. Ex: (cons 'jose '(da silva)) retorna (jose da silva). Funções matemáticas: + (Adição) . Alguns dialetos. Ex: (cdr '(jose da silva)) retorna (da silva). Ex: Embora '(+ 3 4) simplesmente retorna (+ 3 4). (cdr lista) Retorna a lista sem o primeiro elemento. Programas Lisp comerciais são tipicamente compilados por motivos de eficiência mas a semântica do Lisp permite que o programador possa usar programas interpretados e programas compilados ao mesmo tempo. ele é utilizado por diversas companhias aéreas. Ex: (car '(jose silva)) retorna jose. e (quote (jose silva)) retorna (jose silva). Lisp foi o responsável por tornar o Emacs tão popular. (cons atomo lista) Adiciona átomo ao início da lista. desenvolvido pela AutoDesk. Há exemplos disso acima onde se apresenta o resultado interactivo de invocar funções compiladas. Uso de Lisp Lisp foi utilizado para desenvolver o primeiro sistema computacional de matemática simbólica. Ex: (quote jose) retorna jose. O editor de textos Emacs também utiliza Lisp como linguagem de extensão. A maioria dos usos interpretados ocorrem interactivamente. (eval '(+ 3 4)) força a avaliar o (+ 3 4) e portanto retorna 7.Lisp 4 Existe o mito de que Lisp é uma linguagem que só funciona com um interpretador. A Simbolics criou um sistema de modelagem 3D que depois foi adquirido pela IZWare . Entre os vários dialetos de Lisp. sem tentar qualquer forma da avaliação. ISLISP) que permitem o nome first como alternativa para car.

ele foi utilizado nos efeitos do filme Senhor dos Anéis. para evitar o transbordamento da pilha pode ser preferível usar as seguintes. na época da bolha da internet.n 1)))))) Embora as definições acima pareçam correctas.Lisp 5 e atualmente se chama Mirai. O LISP foi utilizado pelo Paul Graham para desenvolver o sistema de e-commerce da Viaweb. que posteriormente foi vendido para o Yahoo por US$ 40 milhões. Common Lisp: (defun fatorial (n) (do ((i n (.i 1)) (resultado 1 (* resultado i))) ((= i 0) resultado))) Scheme: (define fatorial (lambda (n) (let f ((i n) (resultado 1)) (if (= i 0) resultado (f (. Exemplos de código Expressões Lambda ((lambda (arg) (+ arg 1)) 5) Resultado: 6 Fatorial Common Lisp: (defun fatorial (n) (if (= n 0) 1 (* n (fatorial (.i 1) (* resultado i)))))) Na maioria dos dialetos modernos de Lisp usam-se inteiros de precisão numérica indefinida: (fatorial 40) ⇒ 815915283247897734345611269596115894272000000000 (length (write-to-string (fatorial 10000))) .n 1))))) Scheme: (define fatorial (lambda (n) (if (= n 0) 1 (* n (fatorial (.

utl.. GIBSON. o resultado é um número racional ⇒ 66864508220128937516859865761265220075208572928000000000/26085593 (. Thomas J.com.html • http://www-formal.(/ (* (rationalize pi) (fatorial 40)) (fatorial 40)) (rationalize pi)) ⇒0 .141592653589793 (rationalize pi) .gia. History of Programming Languages II.stanford.ist.ufrn.html • http://www. no Common Lisp se pode ter esta interacção: pi ⇒ 3. ISBN 0-201-89502-1 Ligações externas • http://www-formal..edu/jmc/lisp20th/lisp20th.cc/) • Lisp para Autocad .br/~adelardo/lisp/) (em Common Lisp) • Introdução à Linguagem Lisp (http://www.AutoLisp (http://www. Addison-Wesley.Lisp 6 ⇒ 35660 .gigamonkeys.pt/Lisp9596/Lisp9596.edu/jmc/history/lisp/lisp. dígitos no resultado de (fatorial 10000) (/ (fatorial 10000) (fatorial 9998)) ⇒ 99990000 . Richard G. 1996. aproximação do valor como número racional ⇒ 245850922/78256779 (* (rationalize pi) (fatorial 40)) .paulgraham.com/onlisp. Por exemplo.br) .html) • Grupo de usuários no Brasil (http://lisp-br. 864.void. pag.dca.stanford. resultado exato Naqueles dialetos também usam-se números racionais de precisão numérica indefinida. New York: ACM Press.html • Linguagem LISP (http://www.autolisp. o resultado da aritmética racional é exato [1] BERGIN.com/book/ • http://www.

incluindo Scheme. Steele Jr. Clozure Common Lisp. resultando no nome "Common Lisp"[1] . registro X3. Steele nos anos 1980 a partir da linguagem Lisp com o intuito de combinar aspectos de diversos dialetos Lisp anteriores. LispWorks Influenciada Lisp. Smalltalk por Influenciou Dylan. 1994 para o ANSI Common Lisp Criado por Comitê ANSI X3J13.[2] .Programming Language . Steel Bank Common Lisp. Allegro Common Lisp. Exemplos de código Hello world (defun hello-world (format t "Hello World")) Entrada e Saída (defun pergunta (string) (format t "~%~%~A" string) (read)) (pergunta "Quantos anos voce tem? ") . Scheme. Em 1994 foi publicada no padrão ANSI Information Technology . dinâmica tipagem: Compiladores CLISP. presidido por Guy L. se buscou um nome similar.226-1994 (R1999).Common Lisp 7 Common Lisp Common Lisp Paradigma Multiparadigma. Ruby Common Lisp é uma implementação específica da linguagem de programação Lisp multi-paradigma que suporta programação funcional e procedural.Common Lisp. Clojure. Corman Common Lisp. Foi proposto inicialmente o nome de "Standard Lisp" para a linguagem. Foi criada por Guy L. Orientação a Objetos Surgido em 1984. mas em virtude de de um dialeto Lisp já existir com este nome. É bem maior e semânticamente mais complexa que Scheme uma vez que foi projetada para ser uma linguagem comercial e ser compatível com os diversos dialetos Lisp dos quais derivou. GNU Common Lisp. funcional. Armed Bear Common Lisp. Estilo de forte. Embeddable Common Lisp.

(Descreve técnicas avançadas para uso de macros) • STEELE. ISBN 1-55558-041-6 • TOURETZKY. org/ RecordDetail.. Benjamin Cummings.(1990).. Thomas J. Apress. PAUL.pdf) . 1996. DAVID S. 2005.Implementações de Common Lisp • (http://lib. On Lisp. Paul. 1990.net/~dlw/LispSurvey. 864.yahoo. New York: ACM Press. Common Lisp .html) .M1) .. ISBN 0-13-370875-6 • GRAHAM.pdf) . New Jersey: Prentice Hall.cmu.Livro do Paul Graham em pdf "On Lisp" .Site do autor David S. Addison-Wesley. History of Programming Languages II.net/lib/paulgraham/onlisp. ISBN 0-8053-0492-4 Ver também • Lisp • Scheme [1] BERGIN. Guy L.The Language" disponível em formato HTML • (http://books. aspx?sku=ANSI+ INCITS+ 226-1994+ (R2004)) no sítio da ANSI Ligações externas • (http://www.cs.Common Lisp 8 Loops (defun quadrados (inicio fim) (do ((i inicio (+ i 1))) ((> i fim) 'fim) (format t "~A ~A~%" i (* i i)))) Bibliografia • SEIBEL.(2005). ansi.br/books?id=FYoOIWuoXUIC&dq=Common+Lisp+the+Language& printsec=frontcover&source=bn&hl=pt-BR&ei=SwcHSoP6GZuqtgfL0emdBw&sa=X&oi=book_result& ct=result&resnum=4#PRA1-PA780. Redwood City.google.edu/~dst/LispBook/index. Richard G.cmu.(1993).Livro em pdf "Common Lisp: A Gentle Introduction to Symbolic Computation de David S. Touretzky" • (http://www. Lexington: Digital Press.The Language" pela Google books • (http://common-lisp. Common Lisp .store. pag.html) .html) .cs.edu/~dst/LispBook/book.cmu.The Language. GIBSON. 1996.A Gentle Introduction to Symbolic Computation. PETER. Prentice Hall. 1990. Ansi Common Lisp.com. Touretzky • (http://www. • GRAHAM. 1993.Livro "Common Lisp . Practical Common Lisp.cs.edu/Groups/AI/html/cltl/clm/clm. ISBN 0-201-89502-1 [2] Página do Documento (http:/ / webstore.Livro "Common Lisp .

como todos os dialetos do Lisp. Características Scheme adota uma filosofia minimalista. Ypsilon. Lua Scheme é uma linguagem de programação multi-paradigma que suporta programação funcional e procedural. Steele Jr Estilo de tipagem: forte. Dylan. qualquer outra noção pode ser adicionada via bibliotecas. Steele e Gerald Jay Sussman no outono de 1975. O modelo de Hewitt era orientado a objeto (e influenciado pelo Smalltalk). Ruby. Os objetos eram chamados atores e as mensagens eram também atores. (5+3) seria assim: (+ 5 3) (5+3)x2 seria assim: (* (+ 5 3) 2) (8/2) seria assim: (/ 8 2) O MIT usou desde a década de 80 até 2008 a linguagem Scheme em seu curso introdutório de programação. Escreveram um pequeno interpretador Lisp e adicionaram os mecanismos necessários para a criação de atores e envio de mensagens[1] . a partir da linguagem Lisp com o intuito de estudar a teoria dos atores de Carl Hewitt. SCM. não existem regras de precedência de operadores e sua notação parentizada é usada para todas as chamadas de função. possui pouca sintaxe comparado à maioria das outras linguagens. Sussman e Steele tiveram algum problema no entender algumas das conseqüências do modelo a partir dos artigos de Hewitt e decidiram construir uma implementação de brinquedo de uma linguagem de atores visando experimentá-la. dinâmica Compiladores MIT/GNU Scheme. GNU Guile.Scheme 9 Scheme Scheme Paradigma Multiparadigma: funcional e procedural Surgido em 1975 Criado por Gerald Jay Sussman e Guy L. Devido à sua sintaxe completamete aninhada. e. Existem dois padrões que definem a linguagem Scheme: o padrão oficial IEEE e um padrão popular chamado "Revisedn Report on the Algorithmic Language Scheme". PLT Scheme Dialetos: Linguagem T Influenciada por Lisp Influenciou Cat. onde n é o número de revisões. "Structure and Interpretation of Computer Programs" (escrito por Gerald Sussman e Harold Abelson). ganhou notoriedade pela abordagem inovadora e pela incomum profundidade para um curso introdutório. abreviado como RnRS. Chez Scheme. assim sendo. Common Lisp. Foi criada por Guy L. desta forma não há ambigüidades como as que são encontradas nas linguagens de notação infixa. . na prática. O livro-texto usado na disciplina. provê o mínimo de noções possíveis.

n 1)))))) (fatorial 5) .. => 120 Números Perfeitos Exemplo de programa que mostra os n primeiros números perfeitos: (define inverteListax (lambda (lista1 lista2) (if (null? lista1) lista2 (inverteListax (cdr lista1) (cons (car lista1) lista2))))) (define inverteLista (lambda (lista) (inverteListax lista '()))) (define (perf n) (let loop ((i 1) (sum 0)) (cond ((= i n) (= sum n)) ( (= 0 (modulo n i)) (loop (+ i 1) (+ sum i))) (else (loop (+ i 1) sum))))) (define aux (lambda (x n l) (if (= x 0) l .Scheme 10 Exemplos de código em Scheme Hello world (define hello-world (lambda () (display "Hello World") (newline))) (hello-world) ou simplesmente: (display "Hello World") Recursividade Cálculo do fatorial de um número: (define (fatorial n) (cond ((= n 0) 1) (else (* n (fatorial (.

• SCM. • Guile. • SISC. . • Ikarus. • JScheme. • STk. • PLT Scheme [4]. • Kawa. • Scheme 48. • STklos.x 1) (+ n 1) (cons n l)) (aux x (+ n 1) l))))) (define main (lambda (x) (aux x 1 '()))) (define perfeitos (lambda (n) (inverteLista (main n)))) Compiladores Alguns compiladores de Scheme: • Bigloo. • Chicken. • RScheme. • Pvts. • Ypsilon [5]. • Chez Scheme. • MIT/GNU Scheme [2]. • TinyScheme. • Larceny. • Mosh [3]. • Gambit. • Stalin. • Gauche.Scheme 11 (if (perf n) (aux (.

SUSSMAN. Scheme. Haskell.schemers. History of Programming Languages II. com/ p/ mosh-scheme/ [4] http:/ / www. dinâmica Compiladores JVM. ML. ISBN 0-13-454646-6 ABELSON. gnu. Thomas J. google. Harold.org) . google. Erlang Licença: Eclipse Public License Clojure. 1996. 1996. com/ p/ ypsilon/ Ligações externas • Schemers (http://www. . Common Lisp Influenciada por Lisp. plt-scheme. Gerald Jay. Addison-Wesley. Clojure roda sobre a Java Virtual Machine (JVM). New York: McGraw-Hill. org/ software/ mit-scheme/ [3] http:/ / code.Uma página de referência da linguagem Clojure Clojure Paradigma funcional Surgido em 2007 Criado por Rich Hickey Estilo de tipagem: forte. Prolog. 864. GIBSON. desenvolvida por Rich Hickey. na informática. pag. ISBN 0-07-000484-6 Ver também • LISP [1] BERGIN. Richard G. New Jersey: Prentice Hall PTR. New York: ACM Press. SUSSMAN Julie. 1996. CLR Dialetos: Lisp. org/ [5] http:/ / code. Kent. The Scheme Programming Language: Ansi Scheme.Scheme 12 Bibliografia DYBVIG. Structure and Interpretation of Computer Programs. ISBN 0-201-89502-1 [2] http:/ / www.. R. é uma variante moderna de Lisp..

Scheme e Common Lisp e roda na Java Virtual Machine ou CLR (Common Language Runtime). qualquer número pode trabalhar em paralelo. que tivesse simbiótica a plataforma Java e concebido para multiconcorrência. tendo os valores imutáveis. Esta concorrência é caracteriza pelo conceito de identidades. a sintaxe Clojure é construída em S-expressions. que representam uma série de estados imutáveis ao longo do tempo e. Característica da Linguagem • Uma linguagem compilada produzindo um bytecode JVM • Desenvolvimento dinâmico • Ênfase na recursividade • Concorrência Exemplos (def x 5) (cond (< x 10) "menor" (> x 10) "maior") . Rich Hickey desenvolveu Clojure porque queria um Lisp moderno em programação funcional.Clojure 13 Introdução Clojure é um dialeto moderno da linguagem de programação Lisp. É um paradigma de linguagem de programação funcional. Clojure fornece vários tipos de referência mutáveis para transição entre estados. Sintaxe Como a linguagem Lisp.

Ricardo Ferreira de Oliveira.afonso.afonso.wikipedia. Mschlindwein. Alexg. OS2Warp. SallesNeto BR. 3 edições anónimas . LeonardoG.org/w/index.stabile.stabile. António Leitão. Lvaruzza. Jovica. Netsettler. ThiagoRuiz.Fontes e Editores da Página 14 Fontes e Editores da Página Lisp  Fonte: http://pt.wikipedia. Waltercruz.dos. Leonardo. Rafael. Master. Waldir. Marcelo-Silva.org/w/index. João Carvalho.stabile.org/w/index. Ricardo Ferreira de Oliveira. Antoniopessoa.php?oldid=21680437  Contribuidores: Alchimista. 18 edições anónimas Clojure  Fonte: http://pt. Carlos28.org/w/index. Rita.wikipedia.santos.php?oldid=21762172  Contribuidores: FML.php?oldid=20107103  Contribuidores: FML. GOE. LeonardoG. Marcelo Reis. CommonsDelinker. Ricardo Ferreira de Oliveira. Kensu. LeonardoRob0t.php?oldid=22101785  Contribuidores: Albmont. Mecanismo. FML. 13 edições anónimas Scheme  Fonte: http://pt. 68 edições anónimas Common Lisp  Fonte: http://pt. Manuel Anastácio. Lzuliani. Joyo. Rafael. Leonardo. Juntas. Fredmaranhao. E2mb0t. Leonardo. Jonas AGX.wikipedia. Mateus RM. Ricvelozo. Vargenau. PL Przemek. Villarinho.

org/w/index.svg  Licença: desconhecido  Contribuidores: Tom Hickey and Rich Hickey .svg  Fonte: http://pt.svg  Fonte: http://pt.wikipedia.wikipedia. Licenças e Editores da Imagem Image:Lambda lc. 1 edições anónimas File:Clojure-glyph.Fontes.php?title=Ficheiro:Lambda_lc. Vlsergey.svg  Licença: Public Domain  Contribuidores: Luks. Licenças e Editores da Imagem 15 Fontes.php?title=Ficheiro:Clojure-glyph.org/w/index.

0 Unported http:/ / creativecommons. 0/ .Licença 16 Licença Creative Commons Attribution-Share Alike 3. org/ licenses/ by-sa/ 3.