Lisp

De Wikipedia
Saltar a navegación Saltar a la gueta

Plantía:Ficha de llinguaxe de programación

Lisp (históricamente LISP) ye una familia de lenguaje de programación de computadora de tipu multiparadigma con llarga hestoria y una inconfundible y útil sintaxis basada na notación polaca.

Desenvueltu originalmente en 1958 por John McCarthy y los sos collaboradores nel Institutu Tecnolóxicu de Massachusetts, Lisp ye'l segundu llinguaxe de programación d'altu nivel de mayor antigüedá ente los que siguen teniendo un usu estendíu na actualidá; namái FORTRAN ye anterior.

Al igual qu'el FORTRAN, Lisp camudó enforma dende los sos empiezos, y esistieron un gran númberu de dialectos na so hestoria. Güei, los dialectos Lisp de propósitu xeneral más llargamente conocíos son Common Lisp y Scheme.

Lisp foi creáu originalmente como una notación matemática práctica pa los programes d'ordenador, basada nel cálculo lambda de Alonzo Church. Convirtióse rápido nel llinguaxe de programación favoritu na investigación de la intelixencia artificial (AI). Como llinguaxes de programación precursor, Lisp foi pioneru en munches idees en ciencies de la computación, incluyendo les estructures de datos d'árbol, el remano d'almacenamientu automáticu, tipo dinámicos, y el compilador autu conteníu.

El acrónimo LISP significa "LLIRIUt Processor" (Procesamientu de llistes). Les llistes encadenaes son una de les estructures de datos importantes de Lisp, y el código fuente de Lisp en sí mesmu ta compuestu de llistes. Como resultancia, los programes de Lisp pueden manipoliar el códigu fonte como una estructura de datos, dando llugar a los macro sistemes que dexen a'l programadores crear llinguaxes de dominiu específicu enfiñíos en Lisp.

La intercambiabilidad del códigu y los datos tamién da a Lisp el so instantáneamente reconocible sintaxis. Tol códigu del programa ye escritu como espresiones S, o llistes ente paréntesis. Una llamada de función o una forma sintáctica ye escrita como una llista, cola función o'l nome del operador de primeres, y los argumentos de siguío; por casu, una función f que toma tres argumentos puede ser llamada usando (f x y z).

Historia[editar | editar la fonte]

Lisp foi inventáu por John McCarthy en 1958 mientres taba nel Institutu Tecnolóxicu de Massachusetts (MIT). McCarthy publicó'l so diseñu en 1960 nun artículu de Communications of the ACM tituláu "Funciones recursivas d'espresiones simbóliques y el so cómputu a máquina, Parte I"[1] (la "parte II" nunca foi publicada). Ellí amosó que con dellos operadores simples y una notación pa les funciones, unu puede construyir un llinguaxe Turing completu pa procesamientu d'algoritmos.

Dende 1955 ó 1956, el Information Processing Language foi'l primer llinguaxe de AI, y yá incluyera munchos de los conceutos, tales como procesu per llista y recursión, que vinieron ser usaos en Lisp.

La notación orixinal de McCarthy usaba "espresiones M" en corchetes que seríen traducíes a espresiones S. Como un exemplu, la espresión M car[cons[A,B]] ye equivalente a la espresión S (car (cons A B)). Una vegada que Lisp foi implementáu, el programadores rápido escoyeron usar espresiones S, y les espresiones M fueron abandonaes. les espresiones M remanecieron otra vegada colos intentos efímeros del MLISP[2] de Horace Enea y el CGOL de Vaughan Pratt.

Lisp foi implementáu primero por Steve Russel nun computador IBM 704. Russell lleera l'artículu de McCarthy, y diose cuenta (pa la sorpresa de McCarthy) que la función eval de Lisp podía ser implementada en códigu de máquina. La resultancia foi un intérprete de Lisp funcional que podía ser usáu pa correr programes Lisp, o más correchamente, "evaluar espresiones Lisp".

Dos rutines de llinguaxe ensamblador pal IBM 704 convertir nes operaciones primitives pa descomponer llistes: car (conteníu del rexistru de dirección) y cdr (conteníu del rexistru del decremento). Los dialectos de Lisp inda usen el car y cdr (Plantía:Pron y /ˈkʊdər/) pa les operaciones que retornen el primer elementu y el restu de la llista respectivamente.

El primera compilador completu de Lisp, escritu en Lisp, foi implementáu en 1962 por Tim Hart y Mike Levin nel MIT.[3] Esti compilador introdució'l modelu Lisp de compilación incremental, nel cual les funciones compiladas ya interpretaes pueden entemecese llibremente. El llinguaxe nos avantos de Hart y Levin ye muncho más cercanu al estilu modernu de Lisp que l'anterior códigu de McCarthy.

Xenealoxía y variantes[editar | editar la fonte]

Sobre la so hestoria de cincuenta años, Lisp produció munches variaciones na tema base d'un llinguaxe d'espresión S. Per otra parte, cada dialectu dáu puede tener delles implementaciones, por casu, hai más d'una docena de implementaciones del Common Lisp.

Les diferencies ente los dialectos pueden ser bien visibles, por casu, el Common Lisp y el Scheme usen distintes palabres clave pa definir funciones. Dientro d'un dialectu que ta estandarizado, sicasí, les implementaciones conformaes soporten el mesmu llinguaxe base, pero con distintes estensiones y biblioteques.

Relación cola intelixencia artificial[editar | editar la fonte]

Dende'l so entamu, Lisp taba estrechamente rellacionáu cola comunidá d'investigación de la intelixencia artificial, especialmente en sistemes PDP-10.[4] Foi usáu como la implementación del llinguaxe de programación Micro Planner que foi la fundación pal famosu sistema de AI SHRDLU. Nos años 1970, a midida que la investigación del AI nició descendientes comerciales, el desempeñu de los sistemes Lisp esistentes convertir nun problema creciente.

Lisp yera un sistema difícil d'implementar coles técniques de compilador y hardware común de los años 1970. Les rutines de recueya de basura, desenvueltes pol entós estudiante graduáu del MIT, Daniel Edwards, fixeron prácticu correr Lisp en sistemes de computación de propósitu xeneral, pero la eficacia inda siguía siendo un problema. Esto llevó a la creación de les máquines Lisp: hardware dedicáu pa correr ambientes y programes Lisp. Meyores tantu nel hardware d'ordenador como na tecnoloxía de compiladores llueu fixeron obsoletas a les máquines de Lisp, en desterciu del mercáu de Lisp.

Mientres los años 1980 y 1990, foi fechu un gran esfuerzu pa unificar los numberosos dialectos de Lisp nun solu llinguaxe (más notablemente, InterLisp, Maclisp, ZetaLisp, MetaLisp, y Franz Lisp). El nuevu llinguaxe, Common Lisp, foi esencialmente un subconxuntu compatible de los dialectos que reemplazó. En 1994, la ANSI publicó l'estándar del Common Lisp, "ANSI X3.226-1994 Information Technology Programming Language Common Lisp". Naquel momentu'l mercáu mundial pa Lisp yera muncho más pequenu de lo que ye güei.[ensin referencies]

Dende l'añu 2000[editar | editar la fonte]

Tornando daqué nos años 1990, Lisp esperimentó una nueva crecedera d'interés. La mayor parte de la nueva actividá ta enfocada alredor de les implementaciones de fonte abierta del Common Lisp, ya inclúi el desenvolvimientu aplicaciones y de nueves biblioteques portátiles. Esti interés puede ser midíu en parte poles vientes de la versión impresa de Practical Common Lisp (Common Lisp Prácticu) de Peter Seibel, un tutorial pa nuevos programadores Lisp publicáu en 2004,[5] que tuvo de volao en Amazon.com como'l segundu llibru de programación más popular. El llibru ye accesible en llinia ensin costo.[6]

Munchos nuevos programadores Lisp fueron inspiraos por escritores como Paul Graham y Eric S. Raymond lluchando por un llinguaxe qu'otros consideren anticuáu. Los nuevos programadores de Lisp frecuentemente describen el llinguaxe como una esperiencia qu'abre los güeyos y una aclamación de ser substancialmente más granible qu'otros llinguaxes.[7] Esti aumentu de conciencia puede ser oldeáu col "iviernu de la intelixencia artificial" y la curtia crecedera de Lisp a mediaos de los 1990.[8]

Na so encuesta de les implementaciones del Common Lisp, Dan Weinreb llista once implementaciones viviegamente calteníes. Scieneer Common Lisp ye una nueva implementación comercial qu'encrució (fork) del CMUCL con un primer llanzamientu en 2002.

La comunidá del códigu llibre creó la nueva infraestructura de soporte: Cliki ye una Wiki que recueye la información rellacionada con Common Lisp, el Common Lisp direutory llista recursos, el #lisp ye una canal popular d'IRC (con soporte por un Bot escritu en Lisp), lisppaste soporta la distribución y l'intercambiu y comentariu de retazos de códigu (snippets), el Planet Lisp recueye'l conteníu de dellos blogues rellacionaos con Lisp, nel LispForum l'usuariu alderica tópicos sobre Lisp, Lispjobs ye un serviciu p'anunciar ufiertes de trabayu y hai un nuevu serviciu de noticies selmanales (Weekly Lisp News).

Fueron celebraos los 50 años del Lisp (1958-2008) en LISP50@OOPSLA. Hai delles xuntes d'usuariu locales regulares (Boston, Vancouver, Hamburg,…), Xuntes Lisp (European Common Lisp Meeting, European Lisp Symposium) y una International Lisp Conference.

La comunidá Scheme caltién viviegamente más de venti implementaciones. Desenvolviéronse nos últimos años delles significatives nueves implementaciones (Chicken, Gauche, Ikarus, Larceny, Ypsilon). L'estándar de Scheme Revised5 Report on the Algorithmic Language Scheme foi llargamente aceptáu na comunidá del Scheme. El procesu Scheme Requests for Implementation creó munches biblioteques y estensiones casi estándares pal Scheme. Les comunidaes d'usuariu de implementaciones individuales del Scheme siguen creciendo. En 2003 un nuevu procesu d'estandarización del llinguaxe foi empezada y condució al estándar R6RS del Scheme en 2007. L'usu académicu del Scheme pa enseñar ciencies de la computación paez tornar daqué. Delles universidaes yá nun tán usando Scheme nos sos cursos preliminares de ciencies de la computación.

Hai tamién dellos nuevos dialectos Lisp. Notablemente: Newlisp (un llinguaxe de scripting), Arc (desenvueltu por Paul Graham) y apocayá Clojure (desenvueltu por Rich Hickey) y NU pa la programación con Cocoa d'Apple.

Dialectos importantes[editar | editar la fonte]

Los dos principales dialectos de Lisp usaos pa la programación de propósitos xenerales anguaño son Common Lisp y Scheme. Estos llinguaxes representen opciones de diseñu significativamente distintos.

El Common Lisp, descendiente principalmente de MacLisp, Interlisp, y Lisp Machine Lisp, ye un superconjunto ampliáu de los primeros dialectos del Lisp, con un estándar de llinguaxe grande incluyendo munchos tipos de datos y formes sintáctiques incorporaos, según un sistema del oxetu. El Scheme ye un diseñu más minimalista, con un muncho más pequenu conxuntu de característiques estándar pero con ciertes característiques de implementación (tales como optimización de llamada de cola y continuación completa) non atopaes necesariamente en Common Lisp. El Common Lisp tamién tomó emprestaes ciertes característiques de Scheme tales como ámbitu de léxicu y clausura léxica.

El Scheme, ye un dialectu del llinguaxe Lisp con ámbitu estáticu y cola recursiva auténtica inventáu por Guy Lewis Steele Jr. y Gerald Jay Sussman. Foi diseñáu pa tener una semántica escepcionalmente clara y simple y poques maneres distintes de formar espresiones. Una amplia variedá de paradigmes programaos atopen una espresión conveniente en Scheme, incluyendo los estilos imperativu, funcional, y pasu de mensaxes. El Scheme sigue evolucionando con una serie de los estándares (Revisedn Report on the Algorithmic Language Scheme) y una serie de Scheme Requests for Implementation.

Amás, los dialectos de Lisp son usaos como llinguaxes de scripting nun númberu d'aplicaciones, colos más conocíos siendo'l Emacs Lisp nel editor de Emacs, Visual Lisp en AutoCAD, Nyquist en Audacity.

Innovaciones del llinguaxe[editar | editar la fonte]

Lisp foi'l primer llinguaxe de programación homoicónico: la representación primaria del códigu del programa ye'l mesmu tipu d'estructura de la llista que tamién ye usada pa les principales estructures de datos. Como resultancia, les funciones de Lisp pueden ser manipoliaes, alteriaes o entá creaes dientro d'un programa Lisp ensin un estensivu analís sintácticu (parsing) o manipulación de códigu de máquina binariu. Esto xeneralmente ye consideráu una de les ventayes primaries del llinguaxe con al respective de el so poder espresivu, y fai al llinguaxe favorable a la evaluación metacircular.

La ubicua estructura IF THEN ELSE, agora almitida como un elementu esencial de cualquier llinguaxe de programación, foi inventada por McCarthy pal usu en Lisp, onde vio la so primer apariencia nuna forma más xeneral (la estructura cond). Foi heredada pol ALGOL, que la popularizó.

Lisp influyó fondamente a Alan Kay, el líder d'investigación del Smalltalk, y entós de la mesma Lisp foi influyíu por Smalltalk, adoptando les característiques de la programación empobinada a oxetos (clases, instancies, etc.) a finales de los años 1970.

En gran parte por cuenta de los sos requerimientos de recursos con respectu al tempranu hardware computacional (incluyendo los primeres microprocesadores), Lisp nun se fixo tan popular fora de la comunidá de AI, como lo fueron el FORTRAN y el descendiente del llinguaxe ALGOL, el llinguaxe C. Llinguaxes más nuevos como Java y Python incorporaron delles versiones llindaes de delles de les característiques de Lisp, pero nun pueden necesariamente brindar la coherencia y la sinergia de los conceutos completos atopaos en Lisp. Por cuenta de la so conveniencia p'aplicaciones mal definíes, complexes, y dinámiques, Lisp tán esfrutando anguaño d'un ciertu resurdimientu del interés popular.

Llistes[editar | editar la fonte]

L'elementu fundamental en Lisp ye la llista, nel sentíu más ampliu del términu, pos tanto los datos como los programes son llistes. D'ende vien el so nome, pos Lisp ye un acrónimo de "ListProcessing".

Les llistes en LISP tán delimitadas por paréntesis. D'equí vien el chiste del significáu de LISP: "LostInStupidParentheses" qu'anque con bon humor ye dafechu ficticiu.

Dalgunes de les funciones predefinidas de Lisp tienen símbolos familiares (+ pa la suma, * pal productu), pero otres son más exótiques, especialmente dos que sirven precisamente pa manipoliar llistes, descomponiéndoles nos sos componentes. Los sos nomes ("car" y "cdr") son un pocu estraños, reliquies de tiempos pasaos y de la estructura d'el ordenadores de segunda xeneración, "car" devuelve la cabeza d'una llista y "cdr" la so cola o restu.

Lisp sigue una filosofía de tratamientu non-destructivu de los parámetros, de cuenta que la mayoría de les funciones devuelven una llista resultáu d'efectuar dalgún tresformamientu sobre la que recibieron, pero ensin alteriar esta postrera.

Unu de los motivos polos que Lisp ye especialmente afechu pa la IA ye'l fechu de que'l códigu y los datos tengan el mesmu tratamientu (como llistes); esto fai especialmente senciellu escribir programes capaces d'escribir otros programes según les circunstancies.

Lisp foi unu de los primeros llinguaxes de programación n'incluyir manexu d'esceiciones coles primitives catch y throw.

Deriváu de Lisp ye'l llinguaxe de programación Logo. Ensin entrar en detalles, podría dicise que Logo ye Lisp ensin paréntesis y con operadores aritméticos infixos.

Oríxenes de "car" y "cdr"[editar | editar la fonte]

Artículu principal: CAR y CDR
  • car: Content of Address part of Register
  • cdr: Content of Decremental part of Register

Son operaciones del conxuntu d'instrucciones del IBM 704

Exemplos[editar | editar la fonte]

Hola mundu[editar | editar la fonte]

(format t "¡Hola, mundu!")

Trabayando con llistes[editar | editar la fonte]

*******************************************************************
Definición de la función:

  (defun vacia (l)
    (cond ((null l) 1)    ; si la llista esta vacida devuelve 1
          (t 0)))         ; n'otru casu (llista llena) devuelve 0

Llamada a la función:

  (vacia '(1 3 4))        ; La llista non esta vacida, devolvería 0
  (vacia '())             ; La llista esta vacida, devolvería 1
*******************************************************************
(defun últimu (llista)
  (cond ((null (cdr llista)) (car llista))
        (t (postreru (cdr llista)))))

(postreru '(1 2 3 4 5 6 7)) ; devuelve'l postreru de la llista: 7


*******************************************************************
; ---FACTORIAL----
;Definición matemática ;
Factorial(x) = 1 si x=0 caso base ;
x*factorial(x-1) si x>0 casu recursivo

;Función factorial fecha con recursividad non final
(defun factorial (n)
   (if (= 0 n)
     1                            ; caso base (*
     n (factorial (- n 1)))))  ; casu recursivo

(factorial 4) ;esto devolveríanos 24=4*3*2*1




*******************************************************************

Grandes valores de la Función de Ackermann[editar | editar la fonte]

 ;Propuesta por Nikolai Coica
 (defun ackermann (m n) "The Ackermann Function"
   (cond ((= m 0) (+ n 1))
         ((= m 1) (+ n 2))
         ((= m 2) (+ 3 (* n 2)))
         ((= m 3) (+ 5 (* 8 (- (expt 2 n) 1))))
         (t (cond ((= n 0) (ackermann (- m 1) 1))
                  (t (ackermann (- m 1) (ackermann m (- n 1))))))))

Referencies[editar | editar la fonte]

  1. John McCarthy. «Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I». Consultáu'l 13 d'ochobre de 2006.
  2. David Canfield Smith. «MLISP Users Manual». Archiváu dende l'orixinal, el 24 de setiembre de 2006. Consultáu'l 13 d'ochobre de 2006.
  3. Tim Hart and Mike Levin. «AI Avantu 39-The new compiler». Consultáu'l 13 d'ochobre de 2006.
  4. The 36-bit word size of the PDP-6/PDP-10 was influenced by the usefulness of having two Lisp 18-bit pointers in a single word. Lum Johnson (18 d'ochobre de 1990). «The History of TOPS or Life in the Fast ACs». alt.folclor.computers. 84950@tut.cis.ohio-state.edu. http://groups.google.com/group/alt.folclor.computers/browse_thread/thread/6y5602ce733d0ec/17597705ae289112. «The PDP-6 project started in early 1963, as a 24-bit machine. It grew to 36 bits for LISP, a design goal.». 
  5. Practical Common Lisp going into 3rd printing
  6. Practical Common Lisp
  7. «The Road To Lisp Survey». Consultáu'l 13 d'ochobre de 2006.
  8. Trends for the Future

Ver tamién[editar | editar la fonte]

Enllaces esternos[editar | editar la fonte]

Aplicaciones en Lisp[editar | editar la fonte]

Ente les más esitoses aplicaciones escrites en Lisp pueden mentase:

Compiladores de Lisp[editar | editar la fonte]



Lisp