Ā«LieliskÄkÄ programmÄÅ”anas valoda, kas jebkad radÄ«taĀ«
ā Alans Kejs, "On Lisp"
Kad Makartijs 1950. gadu beigÄs izstrÄdÄja Lisp valodu, tas radikÄli atŔķīrÄs no esoÅ”ajÄm valodÄm, no kurÄm vissvarÄ«gÄkÄ bija
Lisp iepazÄ«stinÄja ar deviÅÄm jaunÄm idejÄm:
1. NosacÄ«jumi. NosacÄ«tie apgalvojumi ir ja-then-else konstrukcijas. Tagad mÄs tos uzskatÄm par paÅ”saprotamiem. ViÅi bija
2. Funkcijas veids. ProgrammÄ Lisp funkcijas ir pirmÄs klases objekti - tie ir datu tips, tÄpat kÄ skaitļi, virknes utt., un tiem ir burtisks attÄlojums, tos var saglabÄt mainÄ«gajos, var nodot kÄ argumentus utt.
3. Rekursija. Rekursija, protams, pastÄvÄja kÄ matemÄtisks jÄdziens pirms Lisp, taÄu Lisp bija pirmÄ programmÄÅ”anas valoda, kas to atbalstÄ«ja. (IespÄjams, tas ir paredzÄts, veidojot funkcijas kÄ pirmÄs klases objektus.)
4. Jauns mainÄ«go lielumu jÄdziens. ProgrammÄ Lisp visi mainÄ«gie ir efektÄ«vi norÄdes. VÄrtÄ«bas ir tipiem, nevis mainÄ«gajiem, un mainÄ«go pieŔķirÅ”ana vai saistÄ«Å”ana nozÄ«mÄ rÄdÄ«tÄju kopÄÅ”anu, nevis to, uz ko tie norÄda.
5. Atkritumu kolekcija.
6. Programmas, kas sastÄv no izteiksmÄm. Lisp programmas ir izteiksmju koki, no kuriem katrs atgriež vÄrtÄ«bu. (Dažas Lisp izteiksmes var atgriezt vairÄkas vÄrtÄ«bas.) Tas atŔķiras no Fortran un daudzÄm citÄm veiksmÄ«gÄm valodÄm, kas atŔķir āizteiksmesā un āpaziÅojumusā.
Fortran Ŕī atŔķirÄ«ba bija dabiska, jo valoda bija orientÄta uz lÄ«niju (tas nav pÄrsteidzoÅ”i valodai, kuras ievades formÄts bija perfokarte). Jums nevarÄja bÅ«t ligzdoti priekÅ”raksti. Un, kamÄr jums bija vajadzÄ«gas matemÄtiskas izteiksmes, lai strÄdÄtu, nebija jÄgas kaut kam citam atgriezt vÄrtÄ«bu, jo var nebÅ«t nekÄ, kas gaidÄ«tu atgrieÅ”anu.
Ierobežojumi tika atcelti lÄ«dz ar blokstrukturÄtu valodu parÄdÄ«Å”anos, taÄu tad jau bija par vÄlu. AtŔķirÄ«ba starp izteicieniem un apgalvojumiem jau ir noteikta. Tas no FortrÄnas nonÄca AlgolÄ un tÄlÄk viÅu pÄcnÄcÄjiem.
Ja valoda sastÄv tikai no izteicieniem, varat sastÄdÄ«t izteicienus, kÄ vien vÄlaties. Varat rakstÄ«t vai nu (izmantojot sintaksi
(if foo (= x 1) (= x 2))
vai
(= x (if foo 1 2))
7. Simbola veids. RakstzÄ«mes atŔķiras no virknÄm, un tÄdÄ gadÄ«jumÄ varat pÄrbaudÄ«t vienlÄ«dzÄ«bu, salÄ«dzinot rÄdÄ«tÄjus.
8. Koda apzÄ«mÄjums izmantojot simbolu kokus.
9. Visa valoda vienmÄr ir pieejama. Nav acÄ«mredzamas atŔķirÄ«bas starp lasÄ«Å”anas laiku, kompilÄÅ”anas laiku un izpildes laiku. Varat apkopot vai palaist kodu lasÄ«Å”anas laikÄ vai lasÄ«t vai palaist kodu, kamÄr jÅ«s kompilÄjat, vai lasÄ«t vai apkopot kodu, kamÄr tas darbojas.
Koda palaiÅ”ana lasÄ«Å”anas laikÄ Ä¼auj lietotÄjiem pÄrprogrammÄt Lisp sintaksi; koda palaiÅ”ana kompilÄÅ”anas laikÄ ir makro pamats; izpildlaika kompilÄcija ir pamats Lisp kÄ paplaÅ”inÄjuma valodas izmantoÅ”anai tÄdÄs programmÄs kÄ Emacs; un visbeidzot, izpildlaika lasÄ«Å”ana ļauj programmÄm sazinÄties, izmantojot s-izteiksmes ā ideju, kas nesen tika izgudrota XML.
SecinÄjums
Kad Lisp pirmo reizi tika izgudrots, Ŕīs idejas bija tÄlu no tradicionÄlajÄm programmÄÅ”anas praksÄm, ko noteica 1950. gadu beigÄs pieejamÄ aparatÅ«ra.
Laika gaitÄ noklusÄjuma valoda, ko iemiesoja populÄro valodu panÄkumi, pakÄpeniski attÄ«stÄ«jÄs uz Lisp. Punkti 1-5 tagad ir plaÅ”i pieÅemti. 6. punkts sÄk parÄdÄ«ties galvenajÄ plÅ«smÄ. Python kaut kÄdÄ formÄ ir 7. klauzula, lai gan nav piemÄrotas sintakses. 8. vienums, kas (ar 9. vienumu) ļauj izmantot makro programmÄ Lisp, joprojÄm ir tikai Lisp ā iespÄjams tÄpÄc, ka (a) tam ir vajadzÄ«gas Ŕīs iekavas vai kaut kas tikpat slikts, un (b) ja pievienojat Å”o pÄdÄjo jaudas palielinÄjumu, varat vairs neapgalvo, ka ir izgudrojis jaunu valodu, bet tikai ir izstrÄdÄjis jaunu Lisp dialektu; -)
Lai gan tas ir noderÄ«gi mÅ«sdienu programmÄtÄjiem, ir dÄ«vaini aprakstÄ«t Lisp, Åemot vÄrÄ tÄ atŔķirÄ«bu no nejauÅ”Äm metodÄm, kas pieÅemtas citÄs valodÄs. IespÄjams, tas nav tas, ko Makartijs domÄja. Lisp nebija paredzÄts FortrÄna kļūdu laboÅ”anai; tas vairÄk parÄdÄ«jÄs kÄ mÄÄ£inÄjumu blakusprodukts
Avots: www.habr.com