«A valaha készült legnagyobb programozási nyelv«
— Alan Kay, „on Lisp”

Amikor McCarthy az 1950-es évek végén kifejlesztette a Lispet, az radikálisan eltért a meglévő nyelvektől, melyek közül a legfontosabb a .
A Lisp kilenc új ötletet valósított meg:
1. Feltételes kijelentések (Conditionals). A feltételes kijelentések az if-then-else konstrukciót jelentik. Ma már természetesnek vesszük őket. Ezeket Lisp fejlesztése során. (A Fortran ekkor csak goto utasításokat volt képes kezelni, amelyek szorosan összefonódtak az alapul szolgáló hardverrel való elágazásokkal.) McCarthy, aki az Algol bizottságában volt, feltételes kijelentéseket hozott be az Algolba, ahonnan más nyelvekre is elterjedtek.
2. Funkcionális típusok (A function type). A Lispen a funkciók első osztályú objektumok – adat típusként léteznek, mint a számok, karakterláncok stb., és szó szerinti megjelenéssel bírnak, tárolhatók változókban, átadhatók argumentumként stb.
3. Rekurzió (Recursion). A rekurzió természetesen matematikai fogalomként létezett a Lisp előtt, de a Lisp volt az első programozási nyelv, ami támogatta ezt. (Ez lehet, hogy a funkciók első osztályú objektumokként való létrehozásában is rejlik.)
4. Új változó fogalom (A new concept of variables). A Lispen minden változó hatékony mutató. Az értékek az adat típusok tulajdonságai, nem a változóké, és a változók hozzárendelése vagy összekapcsolása a mutatók másolását jelenti, nem pedig azt, amire mutatnak.
5. Hulladékgyűjtés (Garbage-collection).
6. Programok kifejezésekből (Programs composed of expressions). A Lispben a programok kifejezésfákból állnak, mindegyik értéket ad vissza. (Néhány Lisp-kifejezés több értéket is visszaadhat.) Ez ellentétben áll a Fortran és sok más népszerű nyelvvel, amelyek megkülönböztetik a „kifejezéseket” és a „kijelentéseket”.
A Fortranban természetes volt, hogy ilyen megkülönböztetések vannak, mert a nyelv lineáris orientáltságú volt (nem meglepő, hogy a bemeneti formátum perforált kártya volt). Nem volt lehetőségem beágyazott kijelentéseket létrehozni. És bármet kellett külön matematikai kifejezéseket használnia, nem volt értelme, hogy bármi más értéket adjon vissza, mert lehet, hogy nem volt ott semmi, ami várt volna visszatérésre.
A blokkszerkezetű nyelvek megjelenésével véget ért a korlátozottság, de ekkorra már túl késő volt. Az kifejezések és állítások közötti különbség már megszilárdult. Ez átváltott a Fortran-ról az Algol-ra, majd azok utódaira.
Amikor a nyelv teljes egészében kifejezésekből áll, bármilyen kifejezést alkothatunk, ahogyan csak szeretnénk. Írhatunk például (a szintaxis használatával )
(if foo (= x 1) (= x 2))vagy
(= x (if foo 1 2))7. Szimbólum típus (A symbol type). A szimbólumok eltérnek a karakterláncoktól, ilyenkor az egyenlőség ellenőrzéséhez az mutatókat hasonlíthatja össze.
8. Kód megjelölése (A notation for code) szimbólumok fák használatával.
9. Az egész nyelv mindig elérhető (The whole language always available). Nincs kifejezett különbség az olvasási idő, a fordítási idő és a végrehajtási idő között. A kódot olvasás közben fordíthatja vagy futtathatja, vagy olvashatja vagy futhatja a kódot a fordítás során, vagy olvashatja vagy fordíthatja a kódot a végrehajtás alatt.
A kód futtatása olvasás közben lehetővé teszi a felhasználók számára a Lisp szintaxisának átkonfigurálását; a kód futtatása fordítás közben a makrók alapja; a végrehajtás során történő fordítás a Lisp-ek programozási nyelvekként való használatának alapja olyan programokban, mint az Emacs; és végül az olvasás futás közben lehetővé teszi a programok számára, hogy interakcióba lépjenek az s-kifejezések használatával, egy ötlet, amelyet nemrégen újra feltaláltak az XML-ben.
Zárás
Amikor a Lisp-et csak feltalálták, ezek az ötletek nagyon távol álltak a programozás szokásos gyakorlataitól, amelyeket az 1950-es évek végén elérhető hardver diktált.
Az idő múlásával a nyelv, amely a népszerű nyelvek sikerében ölt testet, fokozatosan a Lisp felé fejlődött. Az 1-5. pont most széles körben elterjedt. A 6. pont kezd megjelenni a mainstreamben. A Pythonban valamilyen formában ott van a 7. pont, bár megfelelő szintaxis nem létezik. A 8. pont, amely a 9. ponttal (makrók lehetővé tétele a Lisp-ben) még mindig csak a Lisp-ben található, talán azért, mert (a) megköveteli ezeket a zárójeleket vagy hasonlóan rosszat, és (b) ha hozzáadja ezt az utolsó hatalommódszert, akkor már nem állíthatja, hogy új nyelvet találtak fel, csupán új dialektust fejlesztettek ki a Lisp-ből; -)
Bár ez hasznos a modern programozók számára, furcsa Lisp-et az egyéb nyelvekben alkalmazott véletlenszerű technikák eltéréseinek fényében leírni. Lehet, hogy nem ez volt McCarthy gondolata. A Lisp nem azért jött létre, hogy a Fortran hibáit kijavítsa; inkább egy próbálkozás melléktermékeként született. .
Forrás: habr.com
