Seguinte: O Avaliador Acima: Introdução à Linguagem Lisp Anterior: Índice
Índice remissivo

Linguagem de Programação

Uma linguagem de programação não é apenas um meio de indicar a um computador uma série de operações a executar. Uma linguagem de programação é, sobretudo, um meio de exprimirmos ideias acerca de metodologias.

Uma linguagem de programação deve ser feita para seres humanos dialogarem acerca de programas e, só incidentalmente, para computadores os executarem. Como tal, deve possuir ideias simples, deve ser capaz de combinar ideias simples para formar ideias mais complexas e deve ser capaz de realizar abstracções de ideias complexas para as tornar simples.

Existe uma enorme diversidade de linguagens de programação, umas mais adaptadas a um determinado tipo de processos, outras mais adaptadas a outros. A escolha de uma linguagem de programação deve estar condicionada, naturalmente, pelo tipo de problemas que queremos resolver, mas não deve ser um comprometimento total. Para um programador é muito mais importante compreender os fundamentos e técnicas da programação do que dominar esta ou aquela linguagem.

Lisp é uma linguagem dinâmica, cujos programas são constituídos por pequenos módulos, de funcionalidade genérica e que cumprem um objectivo 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 objectivos 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.

A linguagem Lisp nasceu como uma ferramenta matemática, independente de qualquer computador e só posteriormente se procedeu à sua adaptação a uma máquina. Uma vez que em Lisp não existia qualquer dependência, à priori, do processador que iria executar a linguagem, a linguagem também não podia tirar partido das suas potencialidades, sendo as primeiras versões muito ineficientes. Esta ineficiência resultava de os programas Lisp serem interpretados, sendo por isso muito mais lentos do que o que uma compilação permite ao reescrever um programa na linguagem do processador. No entanto, com o aparecimento de compiladores eficazes e de um suporte cada vez maior da parte dos processadores, Lisp possui, actualmente, uma eficiência comparável à das restantes linguagens.

Lisp dá ao programador a capacidade de extender a linguagem como entender, permitindo incorporar outros estilos de programação, como programação orientada para objectos, programação orientada para regras, etc. Quando surgem novos paradigmas de programação, o Lisp incorpora-os facilmente enquanto as antigas linguagens morrem. Isto permite adaptar a linguagem ao problema que estamos a resolver em vez de termos de adaptar o problema à linguagem que estamos a usar.

A facilidade de utilização, adaptação e extensão da linguagem Lisp fez com que surgissem dezenas de versões diferentes: FranzLisp, ZetaLisp, LeLisp, MacLisp, InterLisp, Scheme, T, Nil, XLisp, AutoLisp, etc, para nomear apenas as mais relevantes. Esta multitude de dialectos começou a tornar difícil a livre comunicação entre os membros da comunidade Lisp. Para obviar este problema, criou-se um standard denominado Common Lisp com o objectivo de facilitar a troca de ideias (e programas).

Sendo a linguagem Common Lisp o herdeiro legítimo de todas as outras, ela deve suportar a maioria das capacidades que estas possuem. Como é lógico isto impede a estabilização da linguagem, que ainda não parou de evoluir, sendo ampliada de tempos a tempos para incorporar novos (e velhos) paradigmas de programação. Felizmente, essa ampliação evita (na medida em que isso é possível) alterar funcionalidades das versões anteriores e assim um programa Common Lisp tem a garantia de funcionar independentemente do estado actual da linguagem. O programa pode não estar tecnologicamente actual mas estará sempre funcionalmente actual.

Lisp é uma linguagem interactiva. Cada porção de um programa pode ser compilada, corrigida e testada independentemente das restantes. Deste modo, Lisp permite a criação, teste e correcção de programas de uma forma incremental, o que facilita muito a tarefa do programador.

Quase todos as versões de Lisp possuem simultaneamente um compilador e um interpretador, permitindo misturar livremente código compilado e interpretado e permitindo realizar compilações incrementais.

Embora os exemplos que iremos apresentar tenham sido ensaiados em Common Lisp, falaremos genericamente da linguagem Lisp.


Seguinte: O Avaliador Acima: Introdução à Linguagem Lisp Anterior: Índice
Índice remissivo

Copyright António Leitão, 1995