Students
Advertisement

LISP[]

Introdução[]

A linguagem de programação LISP foi criada pelo Professor John McCarthy em 1958 no MIT (Instituto de Tecnologia de Massachusetts), se tornando a segunda mais antiga linguagem de programação de alto nível do mundo, mais recente apenas que a linguagem FORTRAN. A idéia teórica da linguagem foi apresentada pelo professor em uma aula para os alunos do MIT e um Grupo de Inteligência Artificial, liderados pelo estudante Russel, decidiram implementá-la em um computador IBM 70. Assim nasceu LISP fruto do espírito prático de alguns alunos com grande conhecimento teórico.

A partir desses fatos históricos foi criada oficialmente a versão LISP 1.5, entretanto outras versões foram criadas devido à linguagem ter tido sua origem em uma universidade, tais como: FranzLisp, ZetaLisp, LeLisp, MacLisp, InterLisp, Scheme, T, Nil, XLisp, AutoLisp, entre outros. Essas versões não seguiam um padrão tendo uma grande quantidade de dialetos, detalhes e ambientes de programação que eram totalmente distintos. Para resolver o problema em 1984 foi lançado o livro “Common Lisp: The Language” padronizando os dialetos mais usados entre todas versões.

LISP é uma linguagem funcional e dinâmica, cujos programas são constituídos por pequenos módulos, de funcionalidade genérica e que cumprem um objetivo muito simples. É a sua combinação que produz um programa completo. Os módulos desenvolvidos em LISP possuem, geralmente, uma funcionalidade que ultrapassa largamente os objetivos para que foram concebidos. A não tipificação de dados, a possibilidade de tratar dados e programas de um mesmo modo e a indistinção entre funções definidas pela linguagem e funções definidas pelo programador são algumas das razões da sua flexibilidade.

Uma das idéias mais importantes do LISP é o fato de seus dados serem listas, inclusive seus programas. Estes têm a capacidade de receber outros programas como dados (argumentos), permitindo o surgimento de idéias como a recursividade, entre outras.

Ela foi pioneira por apresentar coleta de lixo, ter uma estrutura de dado chamada árvore, ter tipagem dinâmica, entre outros.

Características[]

- Linguagem funcional, ou seja, dá ênfase às funções como estruturas principais da programação, ao invés das mudanças de estado (programação imperativa, estruturada) ou das "propriedades" das diversas partes de um programa (programação orientada a objeto).


- Ela tem homoiconicidade (tradução livre de homoiconicity) que como diz a Wikipédia: "É uma propriedade de algumas linguagens de programação, na qual a representação primária de programas é também uma estrutura de dados em um tipo primitivo da linguagem por si mesma, de homo significando o mesmo e icon significando representação."


- É multi-paradigma, podendo ser estrutural, funcional e orientada a objeto.


- Existem diversos dialetos por ter surgido num ambiente acadêmico e sem propósito comercial e de divulgação amplos originalmente.


- Influenciou várias linguagens como Dylan, Logo, SmallTalk, Haskell, etc...


- Tem tipagem dinâmica, isto é o tipo dos dados não é determinado explicitamente pelo programador, e sim pelo compilador e/ou interpretador


- Padronizada pela ISO em 1994.

LISP

LISP2

Operador Condicional (if)[]

LISP3

Conceito de Pilha[]

LISP5

Aplicações[]

A grande maioria das aplicações feitas em LISP se encontra na área de inteligência artificial, uma vez que dificilmente poderia se fazer um programa para as massas já que suas avançadas características fazem dela uma linguagem que requer uma maior quantidade de memória, item esse escasso antigamente.

Apesar disso pode-se destacar sua aplicação como linguagem de extensão de vários programas atualmente como AutoCAD, na forma de um dialeto conhecido como AutoLISP, GIMP, um programa de manipulação de imagens, Emacs, um editor de texto via linha de comando que foi escrito em eLisp, um outro dialeto do LISP.

Não há muitos programas feitos em LISP amplamente conhecidos. Dois dos poucos são GNU Maxima, um programa para efetuar cálculos matemáticos e emacs, um editor de texto via linha de comando dos mais conhecidos.

Exemplos[]

Nota: Todos os programas de exemplo estão escritos em Common LISP.

Um programa fatorial


  (defun factorial (x)
     (if (zerop x) 1
         (* x (factorial (- x 1)))))

A primeira linha define a função fatorial. O primeiro token é defun que define uma função e após ele o nome da função, no exemplo factorial. Logo em seguida vem a definição de parâmetros, no qual x vai ser local à função factorial. Na segunda linha temos uma condição que se traduz se x é igual a zero retorne 1 senão retorne x vezes o fatorial de x - 1.

Há duas coisas importantíssimas a notar:

1ª) Como Lisp é uma linguagem funcional, até mesmo as condições são tratadas de maneira muito próxima a uma função. Assim a sintaxe da condição fica: (condição faça-se-verdadeiro faça-se-falso).

2ª) Ela usa a notação prefixa, a qual é também conhecida como a notação polonesa (http://en.wikipedia.org/wiki/Polish_notation). Ela consiste do operador vindo antes dos operandos.

Portanto, expressões que na notação infixa (a que as pessoas usam diariamente) seriam escritas dessa maneira:

  1) 5 + (7 + 1 )1
  2) (6 - 6 ) + 8 ou 6 - 6 + 8
  3) 4 * (7 + 1)

na notação prefixa passam a serem escritas desta outra:

  1) + 5 + 71
  2) + -66 8
  3) * 4 + 71

Para se computar um fatorial a função seria chamada da seguinte forma:

(factorial 5 )

Aqui estamos chamando a função factorial com um argumento 5, o que retornaria 120


A simples impressão de um Hello World, o qual serve como primeiro programa de quem geralmente está querendo aprender programação que em muitas linguagens seria:

  print( "Hello World" ) 

em LISP seria:

  (print "Hello World" ) 

ou poderia ser:

  (print (list 'Hello 'World) ) 

Neste último podemos notar algumas coisas como a palavra list e os apóstrofos antes das palavras Hello e World. Mesmo assim a saída esse programa também imprime Hello World, entretando, aborda outros aspectos de LISP ainda não comentados. A função list apenas retorna seus argumentos como uma lista. O detalhe do apóstrofo estar presente se deve ao fato do interpretador e/ou compilador tratar as duas seqüências de caracteres como strings e não como qualquer outra coisa que possa vir a ser, como uma função.


LISO4

LISP4

Considerações finais[]

Analisando o material exposto, pode-se concluir que LISP é uma ótima linguagem e tem tudo para que seu uso seja aumentado. Possue muitas características interessantes como o fato de ser multiparadigma, ter coleta de lixo automática, mini-linguagens poderem ser construídas em volta dela, etc... Outro fato que contribui com essa informação é que hoje os computadores tendo muito poder de processamento e memória comparado com o que tinham quando LISP foi lançado, há certamente um espaço para a sua volta.

Apesar disso essa linguagem ainda não é tão usada comercialmente e para a grande maioria dos programadores esse é um empecilho, pois não há um número grande de recursos disponíveis a nível comercial, nem um fato impulsionador para isso. Entretanto, LISP é uma linguagem antiga que pode sempre ser adaptada as novas tecnologias e métodos, fazendo com que nunca fique obsoleta. Sendo assim o rumo de LISP não é uma coisa certa, porém há campo suficiente para manter sua existência e prolongá-la por bastante tempo.

Referências bibliográficas[]

ESPERANÇA, Claudio. LISP- uma introdução..

CACHOPO,João. Introdução à linguagem LISP. 1995

SOLER, Luciano. Programação LISP. 2004

S-expression. Disponível em: http://en.wikipedia.org/wiki/S-expression Acesso: 10 de junho de 2007.

Polisn Notation. Disponível em: http://en.wikipedia.org/wiki/Polish_notation Acesso: 10 de junho de 2007.

Homoiconicity. Disponível em: http://en.wikipedia.org/wiki/Homoiconicity Acesso: 10 de junho de 2007.

Lisp Programing language. Disponível em: http://en.wikipedia.org/wiki/Lisp_programming_language . Acesso: 10 de junho de 2007.

Autores[]

Alberto Placido de Freitas Neto;

Edward Boszczowski;

Marcos Eduardo Crivellaro;

Silvio Ricardo Cordeiro.

Advertisement