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

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

Common Lisp A linguagem de programação programável Vítor De Araújo htp://inf.ufrgs.br/~vbuaraujo/

Apresentações semelhantes


Apresentação em tema: "Common Lisp A linguagem de programação programável Vítor De Araújo htp://inf.ufrgs.br/~vbuaraujo/"— Transcrição da apresentação:

1 Common Lisp A linguagem de programação programável Vítor De Araújo htp://inf.ufrgs.br/~vbuaraujo/

2 Lisp (defun fac (n) (if (= n 0) 1 (* n (fac (- n 1))))) Lots of Irritating Stupid Parentheses? LISt Processing! O código é uma série de listas Representam a árvore sintática do programa Macros podem manipulá-las diretamente! Lisp é uma linguagem homoicônica Código é representado por estruturas de dados da própria linguagem

3 S-Expressions (+ 2 3) Átomos: objetos indivisíveis números Listas: dados compostos São formadas a partir de pares (cons cells) car (ou first): primeiro elemento do par cdr (ou rest); segundo elemento do par (geralmente outro par ou nil) lista átomos símbolo! strings símbolos: representam os identificadores da linguagem

4 Macros (defmacro backwards (args) (reverse args)) (backwards (2 3 +)) => (+ 3 2) => 5 Funções que recebem código e retornam código Chamadas em tempo de compilação Eliminam duplicações de código while, foreach, try/catch, pattern matching... Permitem a criação de novas construções sintáticas Permitem abstrair padrões no código

5 Macros – manipulação de código (setf x 2) (setf y 3) (+ x y) => 5 '(+ x y) => (+ x y) `(+,x,y) => (+ 2 3) no quote: Trata como código quote: Trata como dado backquote: Trata como dado, mas permite inserir trechos de código Usado para criar um template onde se insere o código desejado

6 expande a lista criada por &rest Macros – um exemplo (defmacro while (test &rest body) `(tagbody start (if,test (progn,@body (go start))))) (setf x 0) (while (< x 10) (print x) (incf x)) agrupa os argumentos restantes em uma lista cria uma label para onde se pode saltar backquote substitui pelo teste passado como argumento agrupa vários comandos sob o if (como { } em C) substitui pelo código passado como argumento salta para a label criada

7 Macros – um exemplo (defmacro while (test &rest body) `(tagbody start (if,test (progn,@body (go start))))) (setf x 0) (while (< x 10) (print x) (incf x))

8 Outras possibilidades Banco de dados: integrar SQL na linguagem (e.g., biblioteca CLSQL) Unit testing: tanto executa quanto imprime código Geração de HTML, e.g., CL-WHO: (defmacro test (code expected) `(if (not (equal,code,expected)) (format t "Test ~s failed!~%" ',code))) > (test (+ 2 3) 6) Test (+ 2 3) failed! (with-html-output (*http-stream*) (loop for (link. title) in '(("http://zappa.com/". "Frank Zappa") ("http://marcusmiller.com/". "Marcus Miller") ("http://www.milesdavis.com/". "Miles Davis")) do (htm (:a :href link (:b (str title))) :br))) Linguagem infinitamente extensível!

9 Common Lisp – Outras características interessantes Suporta programação funcional (funções são valores de primeira classe) Compilador faz parte do runtime Common Lisp Object System É possível compilar código em tempo de execução Tipagem dinâmica (elimina a necessidade de algumas "design patterns") Multiple dispatch (método é chamado pelo tipo de todos os argumentos) PPCRE: Expressões regulares tipo Perl até 5x a velocidade da implementação original (em C) Method combinations Desenvolvimento interativo Ambientes que permitem testar código à medida em que é escrito Compilação incremental Lisp is fun! (map #'+ '(1 2 3) '(10 20 30)) => (11 22 33)

10 Mais informações... Practical Common Lisp On Lisp CLiki – Common Lisp Wiki http://gigamonkeys.com/book/ http://www.paulgraham.com/onlisp.html http://gigamonkeys.com/book/ http://cliki.net Contato? vbuaraujo@inf.ufrgs.br


Carregar ppt "Common Lisp A linguagem de programação programável Vítor De Araújo htp://inf.ufrgs.br/~vbuaraujo/"

Apresentações semelhantes


Anúncios Google