Você está na página 1de 26

John McCarthy inventou Lisp em 1958, logo após o

desenvolvimento do Fortran. Foi primeiramente


implementada por Steve Russell em um computador
IBM 704.
É particularmente adequado para programas de
inteligência artificial, uma vez que processa
informações simbólicas eficazmente.
Common Lisp originou-se, durante os anos 1980 e
1990, na tentativa de unificar o trabalho de vários
grupos de implementação, que foram sucessores para
Maclisp como ZetaLisp e NIL NewImplementationofLisp
etc.
Ele serve como uma linguagem comum, que pode
ser facilmente estendida para implementação
específica.
Houve épocas em que havia muitos dialetos de
LISP.
Hoje em dia LISP está estandardizado no padrão
COMMON LISP.
Programas escritos em Common Lisp não
dependem de características específicas da
máquina, como comprimento da palavra etc.
Características do Common Lisp

É máquina-independente
Usa a metodologia de design iterativo e
extensibilidade fácil.
Permite atualizar os programas dinamicamente.
Fornece depuração de alto nível.
Fornece programação orientada a objeto
avançada.
Fornece sistema de macro conveniente.
Fornece um sistema de condição orientado a
objeto.
Fornece biblioteca de e/s completa.
Fornece estruturas de controle extensivas.
Fornece tipos de dados abrangentes como,
objetos, estruturas, listas, vetores, arrays ajustáveis,
hash-tabelas e símbolos.
É baseado em expressões.
A implementação de Common Lisp CLISP provê:
um interpretador.
um compilador para executáveis até 5 vezes mais
rápidos.
todos os tipos de dados com tamanho ilimitado
(a precisão e o tamanho de uma variável não
necessita de ser declarado, o tamanho de listas e
arrays altera-se dinamicamente)
integers de precisão arbitrária, precisão de ponto
flutuante ilimitada.
Aplicações construídas em Lisp

Grandes aplicações bem-sucedidas construídas em


Lisp.
Emacs
G2
AutoCad
Igor Engraver
Yahoo Store
pgEdit
Para mais historias de sucesso siga o link
http://www.lispworks.com/success-stories
Ambiente

CLISP é o compilador multi-architechtural do GNU


Common Lisp usado para configurar o Lisp no
Windows.
A versão do Windows emula um ambiente UNIX
usando MinGW Windows. O instalador cuida disso
e adiciona automaticamente CLISP à variável de
caminho do Windows.
Como usar o CLISP

Durante a instalação, CLISP é automaticamente adicionado


à variável de ambiente, path, se selecionarmos a opção
recomendada isso significa que podemos simplesmente
abrir uma nova janela de prompt de comando e digitar
"CLISP" para abrir o compilador.
Para executar um arquivo *. Lisp ou *. lsp, simplesmente
use-
clisp hello.lisp
(write-line "Hello World")
Estrutura do programa

Expressões Lisp são chamadas expressões simbólicas ou s-


expressões. As s expressões são compostas de três objetos
válidos, átomos, listas e sequências de caracteres.
Qualquer expressão s é um programa válido.
Os programas Lisp são executados em um intérprete ou em
código compilado.
O intérprete verifica o código-fonte em um loop repetido,
que também é chamado de read-evaluate-print loop REPL.
Ele lê o código do programa, avalia-lo e imprime os valores
retornados pelo programa.
Estrutura do programa
Um programa simples
Vamos escrever uma s expressão para encontrar a soma de três
números 7, 9 e 11. Para fazer isso, podemos digitar no prompt do
intérprete.
(+ 7 9 11)
Lisp retorna o resultado:
27
Se quiséssemos executar o mesmo programa como um código
compilado, em seguida, criamos um arquivo de código-fonte Lisp
chamado meuprograma.lisp e digitamos o código a seguir nele.
(write (+ 7 9 11))
Ao clicar no botão Executar, Lisp executa-o imediatamente e o
resultado retornado é:
27
LISP - BASIC SYNTAX

Blocos de construção básicos em Lisp


Os programas em Lisp são constituídos por três blocos de
construção básica:
i. atom
ii. list
iii. string
Um atom é um número ou sequência de caracteres contíguos. Inclui
números e caracteres especiais.
Exemplo
• Alo-mundo, abc123, *alo*
Uma list é uma sequência de atoms e/ou outras listas entre
parênteses. A seguir estão exemplos de algumas listas válidas:
• (alo mundo)
• (a ( a b c) d e fgh)
LISP - BASIC SYNTAX

Uma string é um grupo de caracteres entre aspas duplas. A


seguir estão exemplos de algumas sequências de caracteres
válidas:
• "Eu sou uma String “
• "por favor insira os seguintes detalhes: “
• "a ba c d efg #$ %^&!“

Adicionar comentários
O símbolo de ponto-e-vírgula; é usado para indicar uma
linha de comentário. Por exemplo,
• (write-line “Ola Mundo "); cumprimentar o mundo
• ; =====Tabuada======
Alguns pontos notáveis
A seguir estão alguns dos pontos importantes a observar:
As operações numéricas básicas no Lisp são +,-, *, e /;
Lisp representa uma função chamada FX como FX, por
exemplo cos45 é escrito como cos 45
As expressões Lisp não diferenciam maiúsculas de minúsculas,
cos 45 ou COS 45 são iguais.
Lisp tenta avaliar tudo, incluindo os argumentos de uma
função. Apenas três tipos de elementos são constantes e
sempre retornam seu próprio valor
Números
A letra t, que representa a verdade lógica.
O valor nil, que significa falso lógico, bem como uma lista vazia
Um pouco mais sobre formas Lisp
Anteriormente, mencionamos que o processo de avaliação
do código Lisp toma as seguintes etapas.
O leitor traduz as sequências de caracteres para objetos
Lisp ou s-expressões.
O avaliador define a sintaxe de formas Lisp que são
criadas a partir de s-expressões. Esse segundo nível de
avaliação define uma sintaxe que determina quais s-
expressões são formas Lisp.
Um pouco mais sobre formas Lisp
Agora, uma forma em Lisp poderia ser.
Um atom
Uma lista vazia ou não
Qualquer lista que tenha um símbolo como seu primeiro
elemento
O avaliador funciona como uma função que usa uma forma
Lisp válida como um argumento e retorna um valor. Esta é a
razão pela qual colocamos a expressão Lisp em parênteses,
porque estamos enviando toda a expressão/forma para o
avaliador como argumentos.
Convenções de nomenclatura em Lisp
Nome ou símbolos podem consistir de qualquer número de
caracteres alfanuméricos diferente de espaços em branco,
abrir e fechar parênteses, aspas duplas e simples, barra
invertida, vírgula, ponto e vírgula e barra vertical. Para usar
esses caracteres em um nome, precisamos de usar o
caractere de escape (\).
Convenções de nomenclatura em Lisp

Um nome pode ter dígitos, mas não inteiramente feito de


dígitos, porque então ele seria lido como um número. Da
mesma forma, um nome pode ter períodos, mas não pode
ser feito inteiramente de períodos.
Uso de aspas simples
Lisp avalia tudo, incluindo os argumentos de função e
membros da lista.
Às vezes, precisamos tomar átomos ou listas literalmente e
não queremos que eles sejam avaliados ou tratados como
chamadas de função.
Para fazer isso, precisamos preceder o átomo ou a lista com
uma aspa simples. O exemplo a seguir demonstra isso.
(write-line “Aspas simples usadas inibe a avaliação ")
(write '(* 2 3))
(write-line " ")
(write-line “Aspas simples não usadas, não inibe a avaliação
")
(write (* 2 3))

https://www.youtube.com/watch?v=ymSq4wHrqyU
Tipo de dados em LISP

Tipos de dados Lisp podem ser categorizados como:


Tipos escalar - por exemplo, tipos númericos, caráteres,
símbolos etc.
Estruturas de dados - por exemplo, listas, vetores, bits-
vetores e strings (sequências de caracteres).
Qualquer variável pode levar qualquer objeto Lisp como
seu valor, a menos que tenhamos declarado explicitamente.
Embora não seja necessário especificar um tipo de dados
para uma variável Lisp, no entanto, ele ajuda em
determinadas expansões de loop, em declarações de
método e em algumas outras situações
Tipo de dados em LISP

Os tipos de dados são organizados em uma hierarquia. Um


tipo de dados é um conjunto de objetos Lisp e muitos
objetos podem pertencer a um tal conjunto.
O predicado typep é usado para localizar se um objeto
pertence a um tipo específico.
A função type-of retorna o tipo de dados de um
determinado objeto.
Especificadores de tipo em Lisp

Especificadores de tipo são símbolos definidos pelo sistema


para tipos de dados.

array fixnum package simple-string

atom float pathname simple-vector

bignum function random-state single-float

bit hash-table ratio standard-char

bit-vector integer rational stream


Especificadores de tipo em Lisp
character keyword readtable string
[common] list sequence [string-char]
compiled-function long-float short-float symbol
complex nill signed-byte t
cons null simple-array unsigned-byte
double-float number simple-bit-vector vector

Além desses tipos definidos pelo sistema, podemos criar


nossos próprios tipos de dados.
Quando um tipo de estrutura é definido usando a função
defstruct, o nome do tipo de estrutura se torna um símbolo
de tipo válido.
(setq x 10)
(setq y 34.567)
(setq ch nil)
(setq n 123.78)
(setq bg 11.0e+4)
(setq r 124/2)
(print x)
(print y)
(print n)
(print ch)
(print bg)
(print r)
(setq x 10)
(setq y 34.567)
(setq ch nil)
(setq n 123.78)
(setq bg 11.0e+4)
(setq r 124/2)
(print (type-of x))
(print (type-of y))
(print (type-of n))
(print (type-of ch))
(print (type-of bg))
(print (type-of r))

Você também pode gostar