«KÔige suurem kunagi loodud programmeerimiskeel«
â Alan Kay, «on Lisp»

Kui McCarthy lÔi Lispi 1950ndate lÔpus, erines see radikaalselt olemasolevatest keeltest, millest tÀhtsaim oli .
Lisp hĂ”lmas ĂŒheksa uut ideed:
1. Tingimuslikud vÀljendid (Conditionals). Tingimuslikud vÀljendid on if-then-else konstruktsioon. TÀna peame neid iseenesest mÔistetavaks. Need olid McCarthy poolt Lispi arendamise ajal. (Fortranil olid siis ainult goto-lausungid, mis olid tihedalt seotud aluseks oleva riistvaraga.) McCarthy, olles Algoli komitees, tÔi tingimuslikud vÀljendid Algolisse, kust need levisid teistele keelele.
2. FunktsioonitĂŒĂŒbid (A function type). Lispi puhul on funktsioonid esmaklassilised objektid â need on andmetĂŒĂŒbid nagu numbrid, stringid jne, neil on sĂ”nasĂ”naline representatsioon, neid saab salvestada muutujatesse, neid saab edastada argumentidena jne.
3. Rekursioon (Recursion). Rekursioon, muidugi, eksisteeris matemaatilise mÔistena enne Lispi, kuid Lisp oli esimene programmeerimiskeel, mis seda toetas. (See on vÔimalik seotud funktsioonide loomisega esmaklassiliste objektidena.)
4. Uus muutuja kontseptsioon (A new concept of variables). Lispi puhul on kĂ”ik muutujad efektiivsed pöördurid. VÀÀrtused on see, mis on tĂŒĂŒpide omadus, mitte muutujate omadus, ja muutujate mÀÀramine vĂ”i sidumine tĂ€hendab pöördurite kopeerimist, mitte seda, millele nad osutavad.
5. PrĂŒgi kogumine (Garbage-collection).
6. Programmid koosnevad vĂ€ljenditest (Programs composed of expressions). Lispi programmid on vĂ€ljendite puud, millest igaĂŒhel on vÀÀrtuse tagastamine. (MĂ”ned Lispi vĂ€ljendid vĂ”ivad tagastada mitu vÀÀrtust.) See seisab kontrastis Fortraniga ja paljude teiste edukate keeltega, mis eristavad "vĂ€ljendeid" ja "lausungeid."
Oli loomulik selline erinevus Fortranis, sest keel oli lineaarselt orienteeritud (pole ĂŒllatav keele puhul, mille sisendvorminguks oli perforatiivkaardid). Te ei saanud omada pesastatud lausungeid. Ja kuigi teil olid matemaatilised vĂ€ljendid, ei olnud mĂ”tet sundida midagi muud vÀÀrtust tagastama, sest ei vĂ”inud olla midagi, mis ootas tagastamist.
Piirangud kadusid plokk-struktuursete keeltesse ĂŒleminekul, kuid sel hetkel oli juba liiga hilja. Erinevus avalduste ja vĂ€idete vahel oli juba juurdunud. See ĂŒleminek toimus Fortranilt Algolile ja sealt edasi nende jĂ€reltulijatele.
Kui keel koosneb tĂ€ielikult avaldustest, vĂ”ite koostada avaldusi oma soovide jĂ€rgi. Saate kirjutada kas (kasutades sĂŒntaksit )
(if foo (= x 1) (= x 2))vÔi
(= x (if foo 1 2))7. SĂŒmbolitĂŒĂŒp (A symbol type). SĂŒmbolid erinevad stringsest, seega saate vĂ”rrelda neid vĂ”rreldes pointereid.
8. Koodi notaator (A notation for code) kasutades sĂŒmbolite puid.
9. Kogu keel on alati saadaval (The whole language always available). Pole selget erinevust lugemise, kompileerimise ja kÀitamise aja vahel. Saate kompileerida vÔi kÀivitada koodi lugemise ajal, vÔi lugeda vÔi kÀivitada koodi, kui kompileerite, vÔi lugeda vÔi kompileerida koodi kÀitamise ajal.
Koodi kĂ€itamine lugemise ajal vĂ”imaldab kasutajatel muuta Lisp'i sĂŒntaksit; koodi kĂ€itamine kompileerimise ajal on makrode alus; kĂ€itamine kompileerimise ajal on alus Lisp'i kasutamisele laienduskeelena programmides, nagu Emacs; ja lĂ”puks, lugemine kĂ€itamise ajal vĂ”imaldab programmide vahel suhelda lĂ€bi s-avaldiste, idee, mis on hiljuti uuesti leiutatud XML-is.
KokkuvÔte
Kui Lisp ainult leiutati, olid kÔik need ideed kaugel tavalistest programmeerimistavadest, mida dikteeris 1950ndate lÔpus kergesti saadaval olnud riistvara.
Aja jooksul on vaikesuund, mille on ellu viinud populaarsete keelte edu, jĂ€rk-jĂ€rgult arenenud suunas Lisp'i. Punktid 1-5 on nĂŒĂŒd laialdaselt levinud. Punkt 6 hakkab ilmuma peavoolus. Pythonis on mingil kujul punkt 7, kuigi sobivat sĂŒntaksit pole. Punkt 8, mis (koos punktiga 9) teeb makrode loomise vĂ”imalikuks Lisp'is, on endiselt saadaval vaid Lisp'is, vĂ”ib-olla seetĂ”ttu, et (a) see nĂ”uab neid sulgusid vĂ”i midagi sama halba ning (b) kui lisate selle viimase jĂ”udluse suurenemise, siis ei saa enam vĂ€ita, et olete leiutanud uue keele, vaid olete lihtsalt töötanud vĂ€lja uue Lisp'i dialekti; -)
Kuigi see on kaasaegsetele programmeerijatele kasulik, tundub kummaline iseloomustada Lisp'i selle erinevuste kaudu juhuslikest meetoditest, mis on levinud teistes keeltes. VÔib-olla ei mÔelnud McCarthy sellele. Lisp'i ei projekteeritud, et parandada Fortran'i vigu; see tekkis pigem kÔrvaltoodena katsetest .
Allikas: habr.com
