LISP - S-expressões -------------------- Tudo em LISP é S-expressão (único tipo). Variáveis não têm tipos, mas constantes têm tipo. Qualquer variável aceita qualquer S-expressão como valor ! Contudo, há alguns subtipos. S-expressões: - átomos: - numéricos - strings - símbolos - par-com-ponto: - listas - não-listas Representação de S-expressões: . representação gráfica: caixinhas . representação textual: caracteres ----------------------------------------------------------------------------- Átomos têm representação gráfica IGUAL à representação textual Gráfica | Textual ------------------------- número 1 | 1 string "casa" | "casa" símbolo CASA | CASA Dentro da string faz diferença Maiúsculas / Minúsculas. Em símbolos tanto faz. O interpretador sempre imprime símbolos usando maiúsculas. Outros exemplos de átomos: +1 (número); 1+ (símbolo); ganhei! (símbolo) "(" e ")" (abre- e fecha-parênteses) são caracteres especiais em LISP. Não podem ser usados em símbolos. ----------------------------------------------------------------------------- Par-com-Ponto: estrutura formada por um par de S-expressões. Ou seja, duas S-expressões são usadas para formar uma. Ex: podem ser dois átomos; uma pode ser átomo e a outra par-com-ponto; ambas podem ser pares-com-pontos; etc A ordem em que aparecem as duas S-expressões componentes é relevante. Na represenatção gráfica, colocamos uma caixa com dois compartimentos, cada um deles com um apontador para uma componente do par-com-ponto. Na representação textual, colocamos as duas componentes separadas por um ponto (caracter ".") e envolvemos com um par de parêntesis. Observe que o ponto (".") deve vir com um branco de cada lado, senão pode ser considerado parte do nome de um símbolo. GRÁFICA | TEXTUAL ----------------------------------------------- +-------+ | | | | | ( A . B ) +-------+ | / \ | A B | | ----------------------------------------------------------------- +-------+ | | | | | +-------+ | / \ | +-------+ +-------+ | | | | | | | | +-------+ +-------+ |( ( A . 1 ) . ( "ca" . ( x . 10.0 ) ) ) / \ / \ | A 1 "ca" +-------+ | | | | | +-------+ | / \ | x 10.0| ----------------------------------------------------------------------------- Listas: admitem forma textual alternativa (elimina muitos dos parênteses e pontos). Observe que parênteses em LISP nunca são "de graça". Por exemplo, em Pascal, tanto faz escrever a:= 8 ou a:= (8). Em LISP, (A . B) e' diferente de ((A) . B) ou de ((A . B)). Cada par de parênteses significa uma caixa a mais! Átomo especial: NIL (do latim nada) Representa a lista vazia Gráfica | Textual -------------------------- NIL | NIL ou () -> formas equivalentes NIL: representa também o valor booleano falso. Qualquer outro valor é verdadeiro. Par-com-ponto: tem dois componentes que podem ser átomos ou pares-com-ponto. Listas (definição): Uma lista é NIL ou um par-com-ponto cujo segundo elemento é uma lista. Lista tem representação textual simplificada: Gráfica | Textual ------------------------------------- +---------+ | ( A . NIL ) ou ( A ) | A | NIL | | +---------+ | Gráfica: +-------+ +-------+ +-------+ +-------+ +-------+ +-------+ | S1 | |-->| S2 | |-->| S3 | |-->| S4 | |-->| S5 | |-->| S6 | |-->NIL +-------+ +-------+ +-------+ +-------+ +-------+ +-------+ | | | | | | qq coisa qq coisa qq coisa qq coisa qq coisa qq coisa Textual: ( S1 S2 S3 S4 S5 S6 ) ao invés de ( S1 . ( S2 . ( S3 . ( S4 . ( S5 . ( S6 . NIL ) ) ) ) ) ) Outro exemplo: Gráfica: +-------+ +-------+ +-------+ +-------+ +-------+ +-------+ | | |-->| | |-->| | |-->| | |-->| | |-->| | |-->NIL +-------+ +-------+ +-------+ +-------+ +-------+ +-------+ | | | | | | A B +-------+ +-------+ D E | | |-->| | |-->NIL +-------+ +-------+ | | A B Textual: ( A B ( A B ) D E ) Notas tomadas por Cristina Zanini - RA 950369 Edvaldo Oliveira - RA 950496 Melissa Gigliotti - RA 951822 e editadas por João Meidanis