Selypít
| Selypít | |
|---|---|
| Paradigmák : | multiparadigmatikus: funkcionális , eljárási ; néhány nyelvjárás is moduláris , objektum-orientált , reflexív |
| Kiadás éve: | 1958 |
| Tervező: | John McCarthy |
| Fejlesztő: | Steve Russell, Timothy P. Hart, Mike Levin |
| Gépelés : | dinamikus |
| Nyelvjárások: | Common Lisp , Scheme , Emacs Lisp és még sok más |
| Befolyásolta: | Lambda számítás , Fortran , IPL |
| Érintett: | Logó , Perl , Smalltalk , Clojure , Python , RPL , Ruby , Dylan , Mathematica , REBOL , Haskell , Snap! / BYOB |
A Lisp egy programozási nyelvcsalád , amelyet először 1958-ban határoztak meg, és amelyet a Massachusettsi Műszaki Intézetben (MIT) hoztak létre a be nem írt lambda-számítás alapján . A Fortran után ez a második legrégebbi programozási nyelv, amelyet még mindig használnak.
A Lisp alapján számos dialektus alakult ki . A Common Lisp és a Scheme a legnépszerűbbek közé tartozik . Ezért a Lisp kifejezés gyakran a nyelvcsaládra utal, nem pedig egy meghatározott nyelvjárásra vagy megvalósításra .
történelem
Lisp a Lis t P rocessing (lista feldolgozás) rövidítését jelenti. Ez eredetileg Fortran szubrutinokat jelentett , amelyekkel a lambda számítás által meghatározott szimbolikus számításokat kellett elvégezni . Steve Russell, John McCarthy egyik tanítványa aztán azzal az alapgondolattal állt elő, hogy tolmácsot írjon ezekhez a kifejezésekhez az IBM 704 -hez a "Lisp tolmács Lispben" megfogalmazása alapján . Megszületett a Lisp programozási nyelv.
A Lisp alapvető adatstruktúrái egyetlen értékek (pl. Szimbólumok, számok, karakterláncok), amelyeket atomoknak hívnak, és Cons cellák, amelyekből listák képződnek. A listák szükség szerint beágyazhatók (listák) . Ez megkönnyíti az adatstruktúrák, például az asszociatív tömb megvalósítását is . A listák kerek zárójelben vannak feltüntetve a Lisp-ben:
(A B C)
A programutasítások (beágyazott) listák is, amelyekben az első listaelem minden esetben azonosítja az elvégzendő funkciót. Ezért nincs alapvető különbség az adatok és a programok között; ezt a tulajdonságot homonicitásnak nevezzük. A programozó új vezérlő struktúrákat vagy objektumrendszereket ( OOP ) fejleszthet ( metaprogramozás , makrók ). Lehetővé teszi azonban a programrészek szükség szerinti manipulálását is futás közben.
A Lisp nagy rugalmasságot és kiterjedt befolyást kínál a programozó számára, ezért néha programozható programozási nyelvként emlegetik . Az adatstruktúrák dinamikusan épülnek fel, anélkül, hogy a programozónak kifejezetten kellene foglalnia vagy felszabadítania a memóriaterületet (lásd még a szemétgyűjtést ). Az adattípusokra vonatkozó nyilatkozatok nem kötelezőek, és a Lisp szimbólum bármilyen típusú objektum változójaként használható. Ezen tulajdonságok közül sokat más programnyelveken is átvettek az évek során. Az 1960-as évek elején azonban jóval előrébb jártak, mint koruk.
Az 1970-es és 1980-as években speciális Lisp gépeket fejlesztettek és értékesítettek. Ezek lehetővé tették a Lisp programok gyors futtatását, ami akkoriban csak általános számítógépeken volt lehetséges a típusellenőrzés és az automatikus szemétszállítás nélkül . Ez azonban a gyorsabb számítógépeknél megváltozott.
A Lisp programjait egy fordító értelmezheti vagy lefordíthatja hatékony kódba. Tipikus fordítók a kötegelt fordítók vagy az inkrementális fordítók. Az inkrementális fordítók lefordíthatják az egyes kifejezéseket. A kötegelt fordítók lefordítják az egyes Lisp fájlokat vagy teljes Lisp programokat. A fordítók vagy egy virtuális gép bájtkódjává , más programozási nyelvekre (gyakran C-ben) fordításra fordítják, vagy gépi kódra egy processzor számára .
A LISP rövidítést néha tréfásan úgy értelmezik, hogy "Rengeteg irritáló felesleges zárójel" (sok bosszantó, felesleges zárójel).
fontosságát
Történelmileg Lisp, a Prolog mellett, a mesterséges intelligencia egyik legfontosabb programozási nyelve . Lisp először tette a lambda számítást a programozási nyelv magjává. Ez számos modern programozási nyelv szemantikájának elengedhetetlen eleme.
Ellentétben Európával, ahol az olyan programozási nyelveket, mint az Assembler , a Fortran vagy a Pascal , az eljárási programozási nyelvcsalád klasszikus képviselőiként tanították , a Lisp vagy annak egyik modernebb nyelvjárása, például a Scheme volt és bizonyos esetekben az első programozási nyelvet tanított az Egyesült Államokban . Ennek nagy hatása volt, mivel az eljárási nyelvcsaládok klasszikus képviselői az adatok statikus feldolgozásának képviselői , míg Lisp egyebek mellett szigorúan dinamikus koncepciót képvisel .
szintaxis
Lisp az S-kifejezéseket külső formátumként használja a forrásszöveg és az adatok ábrázolására egyaránt . A függvény- és makrohívásokat listákként írják, amelyek első elemként a függvény vagy makró nevét tartalmazzák. A megjegyzéseket egy vagy többel vezetjük be ;.
Példák a Common Lisp-re:
;; Addiere 2 und 3 und 4:
(+ 2 3 4)
;; Setze die Variable p auf den Wert 3,1415:
(setf p 3.1415)
;; Definiere eine Funktion, die ihr Argument quadriert:
(defun square (x)
(* x x))
;; Quadriere die Zahl 3:
(square 3)
LISP Hello World program :
(princ "Hello, world!")
(terpri)
A (terpri)megtett egy sortörés .
Minimális funkcionalitás a Lisp számára
A minimális Lisp rendszer megvalósításához csak nagyon kevés operátorra és a funkció meghatározásának általános mechanizmusára van szükség. Az eredeti McCarthy-jelentés a következő szolgáltatásokat tartalmazza:
-
first(Visszaadja a lista első elemét; eredetileg hívtákcar(a nyilvántartás címének tartalmából)) -
rest(a lista fennmaradó részét adja vissza (az első elem nélkül); eredetileg hívtákcdr(a regisztráció tartalmi részéből) -
cons(Létrehoz egy CONS pár két mutató és visszaad egy pointert is. Használható például hozzáfűzni egy elemet, hogy az elején egy lista) (re-konstrukció) -
quote(megakadályozza a következő objektum értékelését) -
eq(Két vagy több objektum azonosságának tesztelése) -
cond(Feltételes végrehajtás: Elfogad egy tetszőleges hosszúságú párok listáját, amelyek mindegyike feltételből és számítási szabályból áll. Visszaadja az első számítási szabály értékelési eredményét, amelynek társított feltétele igaz.) - Funkciómeghatározási mechanizmus
lambda
A közös Lisp rendszerek által magukkal hozott funkciók figyelemre méltó részét ezekkel a nyelvi elemekkel lehet meghatározni.
Adattípusok
A Lisp eredeti változatában két alapvető adattípus létezett : atomok és listák . Az atomokat azért nevezték el, mert nem lehetett őket megváltoztatni. A listák elemek szekvenciái voltak, és ezek az elemek lehetnek atomok vagy allisták. Az atom szám vagy szimbólum volt. A szimbólum egy alfanumerikus karakterlánc volt, amelyet változó névként vagy adatelemként használtak a szimbolikus számtanban.
Belsőleg egy szimbólumatomot csak egyszer mentettek a szimbólumtáblázatba . Két azonos szimbólumú atom, amely a forráskód különböző helyein jelent meg, ugyanazt az objektumot képviselte.
Később más adattípusokat vezettek be a lisp nyelvjárásokban, és a lisp atomok fogalma elvesztette jelentőségét.
Idézetek
"A Lisp egy programozható programozási nyelv."
"A Lisp egy programozható programozási nyelv."
"Úgy tűnik, hogy Lisp egy szerencsés felfedezés a helyi maximum számára a programozási nyelvek terén."
"Úgy tűnik, hogy a Lisp a helyi maximum boldog felfedezése a programozási nyelvek sokaságában."
Lisp nyelvjárások
Történelmileg releváns nyelvjárások
- A LISP 1.5 volt az első Lisp verzió, amelyet az MIT-en kívül terjesztettek, és amely egy Lisp-implementáció első funkcionális forrását tartalmazza.
- Maclisp a Common Lisp és a Macsyma számítógépes algebrai rendszer eredeti megvalósítási nyelvének széles körű és befolyásos előfutára volt .
- Az InterLisp a BBN-Lisp- ből alakult ki 1967 - ben, és tovább fejlesztették az Interlisp-D-re , amely egy teljes fejlesztési rendszert alkotott a Lisp Xerox Dolphin gépéhez . 1992-ben az ACM átadta a Szoftver Rendszer Díjat Daniel G. Bobrow , Richard R. Burton, L Peter Deutsch , Ronald Kaplan, Larry Masinter és Warren Teitelman számára az InterLispnél végzett úttörő munkájáért.
- A ZetaLisp (más néven Lisp Machine Lisp ) a Maclisp továbbfejlesztése, és különféle Lisp gépeken futott . Az ízek , az első objektum-orientált kiterjesztés, e nyelvjárás alapján kerültek kialakításra .
- Franz Lisp- t 1978-ban fejlesztették ki a MacLisp-ből, hogy a Macsyma számítógépes algebrai rendszert VAX- on futtassa. Széles körben használták, mert a BSD Unix- szal együtt szállították. Később a Franz Inc.-t alapították ennek a Lisp-nek a fenntartására. A Franz Inc. az 1980-as évek közepe óta értékesíti a Common Lisp megvalósítást (Allegro CL).
- Az XLISP egy objektum-orientált kiterjesztésű LISP, amely gyengébb számítógépeken is fut. Jól ismert alkalmazás az XLispStat statisztikai csomag.
- Az EuLisp európai kísérlet volt egy rendezett és egységes Lisp meghatározására.
- Az ISLisp egy ISO-szabványosított , kompakt Lisp dialektus, amely alkalmas beágyazott rendszerek programozására .
- A Portable Standard Lisp és az úgynevezett Standard Lisp az Utah- i Egyetemen került kifejlesztésre 1980-tól, és főleg a Reduce számítógépes algebra rendszerhez használták . Alkalmazható ALGOL-szerű szintaxisban RLISP szkriptnyelvként .
- Az S-1 Lisp Lisp volt az S-1 Mark IIA szuperszámítógéphez .
A nyelvjárások később terjednek
- A Common Lisp a legkiterjedtebb és leggyakrabban használt lisp nyelvjárás. Úgy ANSI szabványos és támogat a procedurális makrók, lexikális és dinamikus változó kötelező és még sok más. A név emlékeztet arra a szándékra, hogy több összeférhetetlen erőfeszítést egyesítsenek a Maclisp utódjának megtalálásához ( ZetaLisp , Spice Lisp , NIL és S-1 Lisp ). További hatások az InterLisp és a Scheme voltak .
- A rendszer egy minimális és elegáns változat, amely magában foglalja Támogatott folytatások . A Common Lisp-vel ellentétben csak a lexikális változó kötést és a higiénés makrókat ismeri. Egyszerűsége miatt gyakran használják a tanításban, bár a produktív programozás is lehetséges és gyakorolható vele.
- A Clojure egy Lisp dialektus, amely a Java virtuális gépen fut , és interoperabilitást kínál a Java-val .
- Emacs Lisp a programozási nyelv a A GNU Emacs szövegszerkesztő .
Speciális célú nyelvjárások
- Az AutoLISP az AutoCAD CAD rendszer szkriptnyelve, amely az XLISP korai változatán alapul .
- librep vagy rep a rövid egy programozási nyelv Unix-szerű rendszerek és az eredetileg alapul Emacs Lisp , de lexikális helyett dinamikus változót kötelező . A Sawfish ablakkezelőt a rep.
- A muLISP CP / M és MS-DOS alatt fut , valamint néhány programozható zsebszámológépen . A Derive számítógépes algebra rendszer megvalósítására használták .
- A Nyquist a hangszintézis és -elemzés nyelve, és az XLISP-n alapul.
- Az Racket egy Scheme nyelvjárás, amelyet elsősorban a programozási nyelvek fejlesztésére terveztek.
- Az RPL programozható zsebszámológépeken fut, különösen a Hewlett-Packard gyártmányain . Ez egy Lisp-változat, amelyet a fordított lengyel jelöléssel kevertek.
- A System Management Language kibővült az objektum- és eseményorientált programozás nyelvi struktúráival . API-kat tartalmaz az X / Motif , a CMIS és mások számára.
Legutóbbi fejlemények
- Az Arc egy dialektus, amelyet Paul Graham és Robert Morris fejlesztett ki .
- A NewLISP egy szkriptnyelv
- A Hy egy Lisp-nyelvjárás, amely szorosan kapcsolódik a Pythonhoz.
- Az lfe az Erlang virtuális gép Lisp nyelvjárása
irodalom
- John Allen: Lisp anatómiája . McGraw-Hill, 1978, ISBN 0-07-001115-X .
- Christian Queinnec: Lisp kis darabokban . Cambridge University Press, 2003, ISBN 0-521-54566-8 .
- Patrick Henry Winston, Berthold Horn: Lisp . Addison-Wesley Verlag, 1987, ISBN 3-925118-61-6 .
- Walter Sonnenberg: A Lisp használata az Algolhoz hasonló programozási nyelvek meghatározásához és megvalósításához. Karlsruhei Egyetem, 1970.
- Harold Abelson, Gerald Jay Sussman : A számítógépes programok felépítése és értelmezése (SICP) . MIT Press, 1993, ISBN 978-0-262-01153-2 .
web Linkek
- Lisp 1.5 programozói kézikönyv (PDF; 4,5 MB)
- John McCarthy: A szimbolikus kifejezések rekurzív funkciói és számításuk géppel, I. rész (PDF; 214 kB)
- Rövid bevezetés McCarthy munkája alapján (PostScript)
- Paul McJones (Szerk.): A LISP története a Számítógép-történeti Múzeum Szoftvermegőrző Csoportja részéről
- Paul Graham: Lisp gyökerei (PDF; 141 kB)
- ELM-ART - interaktív tanulási program a Lisp programozási nyelv bemutatásához
- Guy L. Steele Jr. és Richard P. Gabriel: Lisp alakulása (PDF; 568 kB)
- Lisp - Az összes programozási nyelv anyja . CRE , 01: 35: 27h
Egyéni bizonyíték
- ↑ Foldoc Jargon File: A terpri kulcsszó eredete. Letöltve: 2010. december 2 .
- ↑ Lisp kaméleon . paulgraham.com
- ^ Arc Forum , hozzáférés: 2016. november 6.
- ↑ Az újLISP-ről
- ↑ (lisp (ízesítve (erlang))). Letöltve: 2019. július 7 .