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

Image
A Lisp gép az MIT Múzeum

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ák car(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ák cdr(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."

- John Foderaro : CACM , 1991. szeptember

"Ú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."

- John McCarthy : Engedje át a Lambdát

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

Legutóbbi fejlemények

irodalom

web Linkek

Egyéni bizonyíték

  1. Foldoc Jargon File: A terpri kulcsszó eredete. Letöltve: 2010. december 2 .
  2. Lisp kaméleon . paulgraham.com
  3. ^ Arc Forum , hozzáférés: 2016. november 6.
  4. Az újLISP-ről
  5. (lisp (ízesítve (erlang))). Letöltve: 2019. július 7 .