Escolar Documentos
Profissional Documentos
Cultura Documentos
Vtor De Arajo
htp://inf.ufrgs.br/~vbuaraujo/
Lisp
(defun fac (n) (if (= n 0) 1 (* n (fac (- n 1)))))
Lots of Irritating Stupid Parentheses? LISt Processing! O cdigo uma srie de listas Representam a rvore sinttica do programa Macros podem manipul-las diretamente!
Lisp uma linguagem homoicnica Cdigo representado por estruturas de dados da prpria linguagem
S-Expressions
(+ 2 3)
tomos smbolo!
lista
tomos: objetos indivisveis nmeros strings smbolos: representam os identificadores da linguagem Listas: dados compostos So 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)
Macros
Permitem a criao de novas construes sintticas while, foreach, try/catch, pattern matching... Eliminam duplicaes de cdigo Permitem abstrair padres no cdigo
backquote: Trata como dado, mas permite inserir trechos de cdigo Usado para criar um template onde se insere o cdigo desejado
Macros um exemplo
(defmacro while (test &rest body) cria uma label para onde se pode saltar `(tagbody start substitui pelo teste passado como argumento (if ,test agrupa vrios comandos sob o if (como { } em C) (progn backquote substitui pelo cdigo passado como argumento ,@body salta para a label criada (go start)))))
expande a lista criada por &rest
Macros um exemplo
(defmacro while (test &rest body) `(tagbody start (if ,test (progn ,@body (go start)))))
Outras possibilidades
Banco de dados: integrar SQL na linguagem (e.g., biblioteca CLSQL) Unit testing: tanto executa quanto imprime cdigo
(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)))
Compilador faz parte do runtime possvel compilar cdigo em tempo de execuo PPCRE: Expresses regulares tipo Perl at 5x a velocidade da implementao original (em C) Common Lisp Object System Tipagem dinmica (elimina a necessidade de algumas "design patterns") Multiple dispatch (mtodo chamado pelo tipo de todos os argumentos)
Method combinations
Desenvolvimento interativo Ambientes que permitem testar cdigo medida em que escrito Compilao incremental Lisp is fun!
Mais informaes...
Practical Common Lisp http://gigamonkeys.com/book/ On Lisp http://www.paulgraham.com/onlisp.html CLiki Common Lisp Wiki http://cliki.net
Contato? vbuaraujo@inf.ufrgs.br