Escolar Documentos
Profissional Documentos
Cultura Documentos
Claudio Esperana
Por qu LISP?
Estruturas de dados complexas podem ser expressas de forma simples No d margem a encher de lingia
Uma funo freqentemente pode ser verificada visualmente
Recursos
Caractersticas do LISP
LISP = LISt Processing Inventada por McCarthy (1959) Implementa o Clculo Lambda de Church
Teoria de funes recursivas Linguagem funcional
Caractersticas do LISP
Manipulao de informao simblica Verso inicial do Lisp era pouco prtica (sem iterao) Muitas verses e dialetos: Franz, Mac, Inter, Common (praticamente o padro) e Scheme (variante enxuta)
Usando LISP
Exemplo:
> (+ 3 4 5 6) 18 > (+ (+ 3 4) (+ (+ 4 5) 6)) 22
Ajuda: a qualquer momento durante a interao digite help O interpretador numera os comandos Ao cometer um erro, o interpretador escreve uma mensagem de erro e entra num break loop, isto , num depurador (debugger) No nosso curso, no necessrio realmente aprender a usar o depurador, por isso, digite quit para voltar ao modo de interao normal Para sair do programa, digite (bye)
tomos
a b c xxx x1 x-1
Constantes
Nmeros: 1 2 1.33 -2.95 Cadeias: abc de x y z
NIL e T
Os smbolos nil e t so especiais pois seus valores so eles prprios Quando o LISP est interpretando uma expresso booleana, o tomo nil usado para denotar o valor falso t denota o valor booleano verdadeiro, mas qualquer valor diferente de nil entendido como verdadeiro
NIL e T - Exemplo
> (<= 2 3) T > (> 3 4) NIL > (and 2 t) T > (and 2 nil) NIL
Avaliando Smbolos
O interpretador sempre tenta avaliar smbolos a menos que sejam precedidos por um apstrofe (quote)
>b *** - EVAL: variable B has no value > 'b B > nil nil >t t
Avaliando Listas
Assim como os smbolos, quando uma lista apresentada ao interpretador, esta entendida como uma funo e avaliada a menos que seja precedida por um apstrofe
> (+ 1 2) 3 > '(+ 1 2) (+ 1 2) > (a b c) *** - EVAL: the function A is undefined
Listas
Em LISP, se algo no um tomo, ento uma lista Uma lista uma seqncia de tomos ou listas entre parnteses. Por exemplo:
(a b c) (d (e f) g) ; Lista com 3 elementos ; Lista com 3 elementos
Observe que os elementos das listas tm que estar separados por um ou mais espaos em branco Observe tambm que ponto-e-vrgula denota o incio de um comentrio em LISP
Funes
O primeiro elemento de uma lista pode portanto denotar o nome de uma funo
Nesse caso, os demais elementos so os argumentos da funo
Definindo Funes
Exemplo
> (defun test (a b) (* 2 (+ a b))) TEST > (test 3 4) 14
Examinando Listas
(car lista) retorna o primeiro elemento de lista (cdr lista) retorna a lista sem o seu primeiro elemento
Um sinnimo de car first CAR = Contents of Address Register
(cons elem lista) retorna uma cpia de lista com elem inserido como seu primeiro elemento Exemplo:
> (cons 'a '(b c)) (A B C) > (cons 'a '(b)) (A B) > (cons 'a nil) (A)
Cons
Conses (S-Expressions)
Em LISP, se algo no um tomo, ento um cons ou S-expression Um cons nada mais que um registro com dois campos, o primeiro chamado de car e o segundo de cdr A regra do ponto:
O cons escrito com o valor dos dois campos entre parnteses ou separados por um ponto Entretanto, se o campo cdr nil ou um cons, o ponto pode ser omitido
Conses Exemplos
> (cons 'a 'b) (A . B) > '(a . b) (A . B) > '(a . nil) (A) > '(a . (b . (c . nil))) (A B C) > '(a . (b . c)) (A B . C) > '((a . b) . c) ((A . B) . C) > '((a . b) . (b . c)) ((A . B) B . C)
Conses e Listas
Podemos ver ento que listas so conses que nunca so escritos com pontos
Muitos autores preferem ignorar conses que no so listas
Cond -icionais
A forma especial cond permite escrever funes que envolvem decises Forma geral:
(cond (bool1 expr1) (bool2 expr2) ... (boolN exprN)
Funcionamento:
As expresses lgicas so avaliadas sucessivamente Se boolI verdadeira ento o cond avalia e retorna exprI Se nenhuma expresso lgica for avaliada como verdadeira, o cond retorna nil
If then else
Exemplo
> (cond ((= 1 2) 'a) ((> 2 3) 'b) ((< 3 4) 'c) ) C > (defun f (lista elem) (cond ((eq lista nil) nil) ((eq (car lista) elem) t) (t (f (cdr lista) elem)) ) ) F > (f '(a b c) 'c) T > (f '(a b c) 'd) NIL
Expresses Lgicas
So montadas com o auxlio das funes que implementam os predicados relacionais e lgicos tradicionais
Predicados lgicos: and or not Predicados relacionais: > = < >= <=
Argumentos devem ser nmeros Para comparar smbolos usa-se o predicado eq Para comparar conses estruturalmente usa-se o predicado equal
Exerccios
Escreva as funes
(apaga L X)
(acresc L X Y)
Dada uma lista L e um elemento X , retorna L sem X. Se L no contm elem inicialmente, retorna uma cpia exata de L > (apaga (a b c d a) a) (b c d) Dada uma lista L, um elemento X e um elemento Y, retorna uma cpia de L onde um Y inserido depois de cada X > (acresc (a b c d a) a k) (a k b c d a k)