**Lisp** (ou **LISP**) é unha familia de linguaxes de programación cunha longa historia e unha distintiva sintaxe chea de parénteses. Orixinalmente especificado en 1958, o Lisp é a segunda linguaxe de programación de alto nivel máis vella en amplo uso hoxe en día por detrás do Fortran. Coma este último, o Lisp cambiou moito dende os seus primeiros días, e son moitos os dialectos que existiron na súa historia. Hoxe, os máis extensamente coñecidos dialectos do Lisp de propósito xeral, son o Common Lisp e o Scheme.

Características
---------------

Lisp foi orixinalmente creado coma unha notación matemática práctica para programas de computadores, baseado no cálculo lambda de Alonzo Church. Axiña se converteu na linguaxe de programación favorita para a investigación na intelixencia artificial. Coma unha das primeiras linguaxes de programación, Lisp foi pioneira en moitas ideas na informática, incluíndo as estruturas de datos tipo árbore, xestión automática de almacenaxe, tipado dinámico ou a programación orientada a obxectos.

O nome de Lisp deriva de "List Processing" (Proceso de listas). As listas enlazadas son as principais estruturas de datos da linguaxe, e o propio código fonte Lisp, en si mesmo, está construído con listas. Coma resultado disto, os programas en Lisp poden manipular código fonte coma unha estrutura de datos, dando lugar a un sistema de macros que permite ós programadores crear novas sintaxes ou incluso novas linguaxes para dominios específicos embebidos no propio Lisp.

A intercambiabilidade de código e dados dálle ademais ó Lisp o instantáneo recoñecemento da súa sintaxe. Todo o código está escrito coma s-expresins (expresións-s), ou listas entre parénteses. Unha chamada a función ou a unha forma sintáctica está escrita coma unha lista co nome da función ou do operador primeiro, e os argumentos a continuación: (f x y z)

A invención do Lisp: 1958-1962
------------------------------

O Lisp foi inventado (ou, coma di Paul Graham, "descuberto" ) por John McCarthy en 1958 mentres estaba no MIT. McCarthy publicou o seu deseño nunha folla no *Magazine Communicatios of the ACM* no 1960, titulado "Funcións Recursivas Expresións Simbólicas e a súa Computación por Máquinas. Parte I". (A segunda parte nunca foi publicada.) El mostraba que cunhas poucas operacións e unha notación para funcións, calquera pode construír unha linguaxe Turing-completa para algoritmos.

O Lisp foi implementado por primeira vez por Steve Russell nunha computadora IBM 704. Rusell lera o artigo de McCarthy, e deuse conta (para sorpresa de McCarthy) que a función *eval* podería ser implementada en código máquina. O resultado foi un intérprete de Lisp que podía ser usado para executar programas Lisp ou, máis exactamente, 'avaliar expresións Lisp.'

O primeiro compilador completo de Lisp, escrito en Lisp, foi implementado no 1962 por Tim Hart e Mike Levin no MIT. (Memo 39[*Ligazón morta*], 767 kB PDF.) Este compilador introduce o modelo Lisp de compilación incremental, no que funcións compiladas e interpretadas poden mesturarse libremente. A linguaxe empregada no memorando de Hart e Levin está moito máis preto do Lisp moderno que do primeiro código de McCarthy.

### Xenealoxía e variantes

Ó longo dos seus cincuenta anos de historia, o Lisp xerou moitas variacións do seu tema central dunha linguaxe de expresións-S. Ademais, cada dialecto concreto pode ter varias implementacións, por exemplo, hai máis dunha ducia de implementacións de Common Lisp.

As diferenzas entre dialectos poden ser claramente visibles, por exemplo, Common Lisp e Scheme fan uso de verbas clave distintas para definir funcións. Dentro dun dialecto estandarizado, porén, as implementacións respectan o núcleo da linguaxe, pero con diferentes extensións e bibliotecas.

Conexión coa Intelixencia Artificial
------------------------------------

Dende a súa concepción, o Lisp estivo estreitamente conectado coa comunidade da investigación en intelixencia artificial, especialmente en sistemas PDP-10.

Lisp era un sistema difícil de implementar coas técnicas dos compiladores e o hardware dos anos 70. As rutinas de recolección de lixo, desenvolvidas por Daniel Edwards]], fixeron práctico executar Lisp en sistemas de computación de propósito xeral, pero a eficiencia era aínda un problema. Isto conduciu á creación das Lisp machines: a medida para a execución de contornas e programas Lisp. Os avances en hardware e en tecnoloxías de compilación pronto fixeron as Lisp machines obsoletas.

Ó longo dos anos 80 e 90 fíxose un grande esforzo para unificar os numerosos dialectos Lisp (os máis notables: InterLisp, Maclisp e ZetaLisp) nunha única linguaxe. A nova linguaxe, o Common Lisp, era en esencia un subconxunto dos dialectos que substituía. En 1994, o ANSI publicou o estándar Common Lisp, "ANSI X3.226-1994 Information Technology Programming Language Common Lisp."

Do 2000 en diante
-----------------

A pesar dun certo declive nos anos 90, o Lisp experimentou un rexurdimento dende o ano 2000. A maior parte da actividade xira ó redor das implementacións de software libre do Common Lisp, e inclúe o desenvolvemento de novas bibliotecas e aplicacións portables. Esta interese pódese medir polas vendas da versión impresa do libro *Practical Common Lisp* de Peter Seibel, un titorial para novos programadores Lisp publicado no 2004 que foi durante un breve período o segundo libro de programación máis popular de Amazon.com. Agora pódese atopar en liña gratis.

Moitos dos novos programadores Lisp foron inspirados por escritores coma Paul Graham a perseguir linguaxes que outros consideraban anticuadas. Os novos programadores Lisp describen a linguaxe coma unha experiencia abridora de ollos e aseguran ser sensiblemente máis produtivos que con outras linguaxes.

### Dialectos modernos maioritarios

Os dous dialectos de Lisp máis utilizados en programación de propósito xeral hoxe en día son Common Lisp e Scheme. Estas linguaxes representan aproximacións substancialmente diferentes.

Common Lisp, descendente sobre todo de MacLisp, InterLisp e Lisp Machine Lisp, é unha expansión de dialectos Lisp máis antigos, cun estándar voluminoso que inclúe moitos tipos de datos e formas sintácticas, ademais dun sistema de obxectos. Scheme ten un deseño máis minimalista, cun conxunto de características estándar moito máis reducido, pero con características incluídas en certas implementacións non necesariamente incluídas en Common Lisp.

Ademais, hai dialectos Lisp usados como linguaxes de scripting en diversas aplicacións, sendo os máis coñecidos o Emacs Lisp do editor Emacs e o AutoLisp do AutoCAD.

Notas
-----

1. ↑  Practical Common Lisp

| * v
* c
* e
Linguaxes de programación |
| --- |
| Baixo nivel | 

|  |  |
| --- | --- |
| Primeira xeración | Código máquina |
| Segunda xeración | Assembly |

 |
| Alto nivel | 

|  |  |
| --- | --- |
| Terceira xeración | 
* A+
* ABC
* Algol
* B
* BASIC
* C
* C++
* C#
* COBOL
* CPL
* D
* E
* Fortran
* Go
* Java
* JavaScript
* Lisp
* Objective-C
* PL/1
* Pascal
* Smalltalk
* Visual Basic .NET

 |
| Cuarta xeración | 
* Clarion
* Clipper
* Clojure
* Common Lisp
* Erlang
* GNU Octave
* Haskell
* Lisp
* Lua
* Julia
* Perl
* PHP
* Prolog
* Python
* R
* Ruby
* Rust
* S
* Scilab
* Stata
* SQL

 |
| Quinta xeración | 
* Mercury
* OPS5
* Prolog

 |

 |
| 
* Ambiente de desenvolvemento
* Metaprogramación
* Programación a nivel funcional
* Programación estruturada
* Programación non estruturada
* Programación imperativa
* Programación modular
* Programación multidimensional
* Orientación a obxectos

 |

|  |  |
| --- | --- |
| Control de autoridades | 
* Wd: Q132874
* BNE: XX535292
* BNF: 11934831x
* EBID: ID
* FAST: 989718
* GEC: 0037382
* GND: 4035918-9
* LCCN: sh85077449
* MAG: 190883126
* NKC: ph117699
* SUDOC: 027270394

 |