«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 Makartijs Lisp izstrādes laikā. (Fortran tajā laikā bija tikai goto paziņojumi, kas bija cieši saistīti ar filiāles norādījumiem par pamatā esošo aparatūru.) McCarthy, būdams Algola komitejā, pievienoja nosacījumus Algol, no kurienes tie izplatījās citās valodās.
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
