Lisp
Lisp (històricament LISP) és una família de llenguages de programació de computadora de tipo multiparadigma en llarga història i una inconfundible i útil sintaxis homoicónica basada en la notació polaca.
Desenrollat originalment en 1959 per John McCarthy i els seus colaboradors en el Institut Tecnològic de Massachusetts, Lisp és el segon llenguage de programació d'alt nivell de major antiguetat; va aparéixer un any despuix de FORTRAN i un abans que COBOL.
De la mateixa manera que COBOL i FORTRAN, Lisp ha canviat molt des dels seus començos, i han existit un gran número de dialectes en la seua història. Hui, els dialectes de Lisp més àmpliament usats són Scheme (1975), Common Lisp (1984), Emacs Lisp (1985) i Clojure (2007).
Lisp va ser creat originalment com una notació matemàtica pràctica per als programes de computadora, basada en el càlcul lambda d'Alonzo Church. Es va convertir ràpidament en el llenguage de programació favorit en l'investigació de la inteligència artificial (AI). Com a llenguages de programació precursor, Lisp va ser pioner en moltes idees en ciències de la computació, incloent les estructures de senyes d'arbre, el manege d'almagasenament automàtic, tipos dinàmics, i el compilador auto contingut.
L'acrònim LISP significa «LISt Processor» (‘processador de llistes’). Les llestes encadenades són una de les estructures de senyes importants de Lisp, i el còdic font de Lisp en sí mateixa està compost de llistes. Com a resultat, els programes de Lisp poden manipular còdic font de Lisp com si foren simples senyes, donant lloc a sistemes de macros que permeten als programadors crear llenguages de domini específic embebidos en Lisp.
La intercambiabilidad del còdic i les senyes també dona a Lisp la seua instantàneament reconeixible sintaxis. Tot el còdic del programa és escrit com expressions S, o llistes entre paréntesis. Una cridada de funció o una forma sintàctica és escrita com una llista, en la funció o el nom de l'operador en primer lloc, i els arguments a continuació; per eixemple, una funció f que pren tres arguments pot ser cridada usant (f x i z).
Història
[editar | editar còdic]Lisp va ser inventat per John McCarthy en 1958 mentres estava en el Institut Tecnològic de Massachusetts (MIT). McCarthy va publicar el seu disseny 1 d'abril de 1960 en un artícul de Communications of the ACM titulat «Funcions recursivas d'expressions simbòliques i el seu còmput a màquina, Partix I»[1] (la «part II» mai va ser publicada). Allí va mostrar que en alguns operadors simples i una notació per a les funcions, un pot construir un llenguage Turing complet per a processament d'algoritmes.
Des de 1955 o 1956, el Information Processing Language va ser el primer llenguage d'AI, i ya havia inclós molts dels conceptes, tals com a procés per llista i recursión, que varen vindre a ser usats en Lisp.
La notació original de McCarthy usava «expressions M» en corchetes que serien traduïdes a expressions S. Com un eixemple, l'expressió M car[cons[A,B]] és equivalent a l'expressió S (car (cons A B)). Una volta que Lisp va ser implementat, els programadors ràpidament varen elegir usar expressions S, i les expressions M varen ser abandonades. les expressions M varen emergir una atra volta en els intents efímers del MLISP[2] d'Horace Enea i el CGOL de Vaughan Pratt.
Lisp va ser implementat primer per Steve Russell en un computador IBM 704. Russell havia llegit l'artícul de McCarthy, i es va donar conte (per a la sorpresa de McCarthy) que la funció eval de Lisp podia ser implementada en còdic de màquina. El resultat va ser un intérpret de Lisp funcional que podia ser usat per a córrer programes Lisp, o més correctament, «evaluar expressions Lisp».
Dos rutines de llenguage ensamblador per al IBM 704 es varen convertir en les operacions primitives per a descompondre llistes: car (contingut del registre de direcció) i cdr (contingut del registre del decremento). Els dialectes de Lisp encara usen el car i cdr (Plantilla:Pron i /ˈkʊdər/) per a les operacions que retornen el primer element i el restant de la llista respectivament.
El primer compilador complet de Lisp, escrit en Lisp, va ser implementat en 1962 per Tim Hart i Mike Levin en el MIT.[3] Este compilador va introduir el model Lisp de compilació incremental, en el qual les funcions compiladas i interpretades poden entremesclar-se lliurement. El llenguage en els memos de Hart i Levin és molt més propenc a l'estil modern de Lisp que l'anterior còdic de McCarthy.
Genealogia i variants
[editar | editar còdic]Sobre la seua història de cinquanta anys, Lisp ha produït moltes variacions en el tema base d'un llenguage d'expressió S. Per una atra part, cada dialecte donat pot tindre vàries implementacions, per eixemple, hi ha més d'una dotzena d'implementacions del Common Lisp.
Les diferències entre els dialectes poden ser molt visibles, per eixemple, el Common Lisp i el Scheme usen diferents paraules clau per a definir funcions. Dins d'un dialecte que està estandardisat, no obstant, les implementacions conformades soporten el mateix llenguage base, pero en diferents extensions i biblioteques.
Relació en l'inteligència artificial
[editar | editar còdic]Des del seu inici, Lisp estava estretament relacionat en la comunitat d'investigació de la inteligència artificial, especialment en sistemes PDP-10.[4] Va ser usat com l'implementació del llenguage de programació Micro Planner que va ser la fundació per al famós sistema d'AI SHRDLU. En els anys 1970, a mida que l'investigació de l'AI va engendrar descendents comercials, l'eixercite dels sistemes Lisp existents es va convertir en un problema creixent.
Lisp era un sistema difícil d'implementar en les tècniques de compilador i hardware comú dels anys 1970. Les rutines de recolecció de fem, desenrollades pel llavors estudiant graduat del MIT, Daniel Edwards, varen fer pràctic córrer Lisp en sistemes de computació de propòsit general, pero l'eficàcia encara seguia sent un problema. Açò va dur a la creació de les màquines Lisp: hardware dedicat per a córrer ambients i programes Lisp. Alvanços tant en l'hardware de computadora com en la tecnologia de compiladors pronte varen fer obsoletes a les màquines de Lisp, en detriment del mercat de Lisp.
Durant els anys 1980 i 1990, va ser fet un gran esforç per a unificar els numerosos dialectes de Lisp en un sol llenguage (més notablement, InterLisp, Maclisp, ZetaLisp, MetaLisp, i Franz Lisp). El nou llenguage, Common Lisp, va anar essencialment un subconjunt compatible dels dialectes que va reemplaçar. En 1994, la ANSI va publicar l'estàndart del Common Lisp, «ANSI X3.226-1994 Information Technology Programming Language Common Lisp». En aquell moment el mercat mundial per a Lisp era molt més menut de lo que és hui.cita requerida
Des de l'any 2000
[editar | editar còdic]Havent declinat alguna cosa en els anys noranta, Lisp va experimentar un nou auge enfocat en les implementacions obertes de Common Lisp i en el desenroll d'aplicacions i de noves biblioteques portàtils. Una mostra d'este interés va ser el que la versió impresa de Practical Common Lisp (Common Lisp Pràctic) de Peter Seibel, un tutorial per a nous programadors publicat en 2004,[5] estiguera breument en Amazon.com com el segon llibre de programació més popular. El llibre és accessible en llínea sense cost.[6]
Molts nous programadors de Lisp varen ser inspirats per escritors com Paul Graham i Eric S. Raymond lluitant per un llenguage que uns atres consideren antiquat. Els nous programadors de Lisp freqüentment descriuen el llenguage com una experiència que obri els ulls i afirmen que és substancialment més productiu que atres llenguages.[7] Este aument de consciència pot ser contrastat en el «hivern de l'inteligència artificial» i el breu creiximent de Lisp a mitan dels 1990.[8]
En la seua enquesta de les implementacions del Common Lisp, Donen Weinreb llesta onze implementacions activament mantingudes. Scieneer Common Lisp és una nova implementació comercial que bifurcó (fork) del CMUCL en un primer llançament en 2002.
La comunitat del còdic lliure ha creat la nova infraestructura de soport: Cliki és un Wiki que arreplega l'informació relacionada en Common Lisp, el Common Lisp directory llista recursos, el #lisp és un canal popular de IRC (en soport per un Bot escrit en Lisp), lisppaste [2] archivat en Wayback Machine. soporta la distribució i l'intercanvi i comentari de retazos de còdic (snippets), el Planet Lisp arreplega el contingut de varis blogs relacionats en Lisp, en el LispForum [3] archivat en Wayback Machine. l'usuari discutix assunts referents a Lisp, Lispjobs és un servici per a anunciar ofertes de treball i hi ha un nou servici de notícies semanals (Weekly Lisp News).
Han segut celebrats els 50 anys del Lisp (1958-2008) en LISP50OOPSLA. Hi ha vàries reunions d'usuari locals regulars (Boston, Vancouver, Hamburg,…), Reunions Lisp (European Common Lisp Meeting, European Lisp Symposium) i una International Lisp Conference.
La comunitat Scheme manté activament més de vint implementacions. S'han desenrollat en els últims anys vàries significatives noves implementacions (Chicken, Gauche, Ikarus, Larceny, Ypsilon). L'estàndart de Scheme Revised5 Report on the Algorithmic Language Scheme va ser àmpliament acceptat en la comunitat del Scheme. El procés Scheme Requests for Implementation ha creat moltes biblioteques i extensions casi estàndars per al Scheme. Les comunitats d'usuari d'implementacions individuals del Scheme continuen creixent. En 2003 un nou procés d'estandardisació del llenguage va ser començada i va conduir a l'estàndar R6RS del Scheme en 2007. L'us acadèmic del Scheme per a ensenyar ciències de la computació sembla haver declinat alguna cosa. Algunes universitats ya no estan usant Scheme en els seus cursos preliminars de ciències de la computació.
Hi ha també alguns nous dialectes Lisp. Notablement: Newlisp (un llenguage de scripting), Arc (desenrollat per Paul Graham) i recentment Clojure (desenrollat per Rich Hickey) i NU per a la programació en Cocoa d'Apple.
Dialectes importants
[editar | editar còdic]Els dos principals dialectes de Lisp usats per a la programació de propòsits generals hui en dia són Common Lisp i Scheme. Estos llenguages representen opcions de disseny significativament diferents.
El Common Lisp, descendent principalment de MacLisp, Interlisp, i Lisp Machine Lisp, és un superconjunto ampliat dels primers dialectes del Lisp, en un estàndart de llenguage gran incloent molts tipos de senyes i formes sintàctiques incorporats, aixina com un sistema de l'objecte. El Scheme és un disseny més minimaliste, en un molt més menut conjunt de característiques estàndar pero en certes característiques d'implementació (tals com optimisació de cridada de coa i continuació completa) no trobades necessàriament en Common Lisp. El Common Lisp també va prendre prestades certes característiques de Scheme tals com àmbit de lèxic i clausura lèxica.
El Scheme, és un dialecte del llenguage Lisp en àmbit estàtic i coa recursiva autèntica inventat per Guy Lewis Steele Jr. i Gerald Jay Sussman. Va ser dissenyat per a tindre una semàntica excepcionalment clara i simple i poques maneres diferents de formar expressions. Una àmplia varietat de paradigmes programats troben una expressió convenient en Scheme, incloent els estils imperatiu, funcional, i pas de mensages. El Scheme continua evolucionant en una série dels estàndarts (Revisedn Report on the Algorithmic Language Scheme) i una série de Scheme Requests for Implementation.
Ademés, els dialectes de Lisp són usats com a llenguages de scripting en un número d'aplicacions, en els més coneguts sent el Emacs Lisp en l'editor d'Emacs, Visual Lisp en AutoCAD, Nyquist en Audacity.
Innovacions del llenguage
[editar | editar còdic]Va ser en Lisp a on varen nàixer moltes idees de les ciències de la computació, incloent la estructura de senya d'arbre, recolecció automàtica de fem, tipado dinàmic, condicionals, funcions d'orde superior com map i reduïx, recursividad, el compilador autocontenido i el REPL.[9][10]
Lisp va ser el primer llenguage de programació homoicónico: tot el còdic font del programa és al mateix temps una estructura de senyes del llenguage (llestes anidadas o arbres). Com resultat la metaprogramación en Lisp és relativament senzilla. Ya que el còdic font de Lisp té una correspondència directa en el arbre sintàctic abstracte del programa, es pot crear còdic de Lisp per a manipular més còdic de Lisp, o encara crear-ho des de zero, sense necessitat d'un extensiu anàlisis sintàctic (parsing) o manipulació de còdic de màquina binario. Açò generalment és considerat una de les ventages primàries del llenguage sobre el seu poder expressiu, i fa al llenguage favorable a la evaluació metacircular.
L'ubiqua estructura IF THEN ELSE, ara admesa com un element essencial de qualsevol llenguage de programació, va ser inventada per McCarthy per a l'us en Lisp, a on va vore la seua primera apariència en una forma més general (l'estructura cond). Va ser heretada pel ALGOL, que la va popularisar.
Lisp va influir profundament a Alan Kay, el líder d'investigació del Smalltalk, i llavors a la seua volta Lisp va ser influenciat per Smalltalk, adoptant les característiques de la programació orientada a objectes (classes, instàncies, etc.) a finals dels anys 1970.
Lisp va introduir el concepte de recolecció de fem, per mig del qual el sistema busca en el «heap» de memòria dinàmica per a eliminar objectes obsolets sense intervenció explícita del programador.[11]
En gran part pels seus requeriments de recursos sobre el primerenc hardware computacional (incloent els primers microprocessadorés), Lisp no es va fer tan popular anara de la comunitat d'inteligència artificial, com lo varen ser el FORTRAN i el descendent del llenguage ALGOL, el llenguage C. Llenguages més nous com Java i Python han incorporat algunes versions llimitades d'algunes de les característiques de Lisp, pero no poden necessàriament brindar la coherència i la sinèrgia dels conceptes complets trobats en Lisp. Per la seua conveniència per a aplicacions mal definides, complexes, i dinàmiques, Lisp estan gojant actualment d'un cert resorgiment de l'interés popular.
Llistes
[editar | editar còdic]L'element fonamental en Lisp és la llista, en el sentit més ampli del terme, puix tant les senyes com els programes són llestes. D'ahí ve el seu nom, puix Lisp és un acrònim de «List Processing».
Les llistes en LISP estan delimitades per paréntesis. D'ací ve el succeït del significat de LISP: «LostInStupidParentheses» que encara que en bon humor és completament fictici.
Algunes de les funcions predefinides de Lisp tenen símbols familiars (+ per a la suma, * per al producte), pero unes atres són més exòtiques, especialment dos que servixen precisament per a manipular llistes, descomponent-les en els seus components. Els seus noms («car» i «cdr») són una miqueta estranys, relíquies de temps passats i de l'estructura dels ordenadors de segona generació, «car» torna el cap d'una llista i «cdr» la seua coa o restant.
Lisp seguix una filosofia de tractament no-destructiu dels paràmetros, de modo que la majoria de les funcions tornen una llista resultat d'efectuar alguna transformació sobre la que varen rebre, pero sense alterar esta última.
Un dels motius pels que Lisp és especialment adequat per a la IA és el fet de que el còdic i les senyes tinguen el mateix tractament (com a llestes); açò fa especialment senzill escriure programes capaços d'escriure atres programes segons les circumstàncies.
Lisp va ser un dels primers llenguages de programació en incloure maneig d'excepcions en les primitives catch i throw.
Derivat de Lisp és el llenguage de programació Logo. Sense entrar en detalls, podria dir-se que Logo és Lisp sense paréntesis i en operadors aritmètics infijos.
Orígens de «car» i «cdr»
[editar | editar còdic]- Artícul principal → CAR i CDR.
- car: Content of Address part of Register
- cdr: Content of Decremental part of Register
Són operacions del conjunt d'instruccions del IBM 704
Eixemples
[editar | editar còdic]Hola món
[editar | editar còdic](format t "¡Hola, món!")Treballant en llestes
[editar | editar còdic]*******************************************************************
Definició de la funció:
(defun vacia (l)
(cond ((null l) 1) ; si la llista esta buida torna 1
(t 0))) ; en un atre cas (llista plena) torna 0
Cridada a la funció:
(vacia '(1 3 4)) ; La llista no esta buida, tornaria 0
(vacia '()) ; La llista esta buida, tornaria 1
*******************************************************************
(defun últim (llista)
(cond ((null (cdr llesta)) (car llesta))
(t (últim (cdr llesta)))))
(últim '(1 2 3 4 5 6 7)) ; torna l'últim de la llista: 7
*******************************************************************
; Factorial(x) = 1 si x=0 case base
; xfactorial(x-1) si x>0 cas recursivo
;Funció factorial feta en recursividad no final
(defun factorial (n)
(if (= 0 n)
1 ; case base
(* n (factorial (- n 1))))) ; cas recursivo
(factorial 4) ;açò nos tornaria 24=4*3*2*1
*******************************************************************Grans valors de la Funció de Ackermann
[editar | editar còdic] ;Proposta per 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))))))))Referències
[editar | editar còdic]- ↑ Commun. ACM.3(4)
- 184–195.ISSN 0001-0782.doi:10.1145/367177.367199.Consultat el 2025-02-28.
- ↑ David Canfield Smith. «MLISP Users Manual». Archivat des d'el original, el 24 de setembre de 2006. Consultat el 13 d'octubre de 2006.
- ↑ Tim Hart and Mike Levin. «AI Memo 39-The new compiler». Archivat des d'el original, el 13 de decembre de 2020. Consultat el de Wayback Machine, 6 de juliol del 2017.
- ↑ 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. «[1]», alt.folklore.computers. «The PDP-6 project started in early 1963, as a 24-bit machine. It grew to 36 bits for LISP, a design goal.»
- ↑ «Practical Common Lisp going into 3rd printing». Archivat des d'el original, el 20 de juny de 2009. Consultat el 19 de setembre de 2009.
- ↑ Practical Common Lisp
- ↑ «The Road To Lisp Survey». Archivat des d'el original, el 4 d'octubre de 2006. Consultat el 13 d'octubre de 2006.
- ↑ «Trends for the Future». Archivat des d'el original, el 3 de juny de 2013. Consultat el 19 de setembre de 2009.
- ↑ Chisnall, David (12 de giner de 2011). Influential Programming Languages, Part 4: Lisp.
- ↑ «Revenge of the Nerds». www.paulgraham.com. Consultat el 22 de maig de 2020.
- ↑ Communications of the ACM.doi:10.1145/358141.358147.Consultat el 22 de maig de 2020.
Vore també
[editar | editar còdic]Enllaços externs
[editar | editar còdic]- Features of Common Lisp Una discussió d'algunes de les característiques més sobreixents del llenguage.
- Recursos Lisp en espanyol [4] archivat en Wayback Machine. Texts en espanyol i traduccions sobre Lisp, Common Lisp, Emacs Lisp, etc.
- Practical Common Lisp Llibre introductori de Common Lisp. Versió en llínea i distribuible per la pròpia editorial.
- The Nature of Lisp. Una introducció per a entendre la naturalea del llenguage i el seu poder.
Aplicacions en Lisp
[editar | editar còdic]Entre les més exitoses aplicacions escrites en Lisp es poden mencionar:
- Emacs, el editor de text http://www.gnu.org/software/emacs/emacs.html
- ACL2, el demostrador de teoremes http://www.cs.utexas.edu/users/moore/acl2/
- Maxima, el sistema d'àlgebra computacional http://maxima.sourceforge.net/
Compiladors de Lisp
[editar | editar còdic]- GNU Common Lisp, software lliure
- Allegro Common Lisp, software propietari
- CMU Common Lisp, software lliure
- CLISP, Una implementació de Common Lisp, software lliure
- OpenMCL [5] archivat en Wayback Machine. Common lisp para Macintosh, software lliure
[[Categoria:#Acrònim d'informàtica]]
Referències
[editar | editar còdic]- Este artícul conté una traducció derivada de «Lisp» de Wikipedia en castellà publicada baix la Llicència de documentació lliure de GNU i la Llicència Creative Commons Reconeiximent-CompartirIgual 4.0 Internacional.