(2002 йылдың майында яңыртылған)
(Был мәҡәлә LL1 таратыу исемлегендәге ҡайһы бер һорауҙарға яуап сифатында барлыҡҡа килде. Хәҙер ул Revenge of the Nerds составына индерелгән.)
Маккарти 1950-се йылдар аҙағында Lisp-ты эшләгәндә, ул ғәмәлдәге телдәрҙән ныҡ айырылып торған радикаль аҙым ине, уларҙың иң мөһиме Fortran булған.
Lisp туғыҙ яңы идеяны кәүҙәләндерҙе:
1. Шартлы конструкциялар. Шартлы конструкция — ул if-then-else структураһы. Хәҙер беҙ быны үҙенән-үҙе аңлашылған тип ҡабул итәбеҙ. Улар Lisp-ты үҫтереү барышында Маккарти тарафынан уйлап табылды. (Ул ваҡытта Fortran-да тик шартлы goto ғына булған, ул аппарат тәьминәтендәге тармаҡланыу инструкцияһына нигеҙләнгән ине.) Algol комитетында булған Маккарти шартлы конструкцияларҙы Algol-ға индерҙе, ә унан улар башҡа күпселек телдәргә таралды.
2. Функция тибы. Lisp-та функциялар — беренсе класлы объекттар; улар бөтөн һандар, юлдар һ.б. кеүек үк мәғлүмәт тибы булып тора, һәм уларҙың литерал күренеше бар, уларҙы үҙгәреүсәндәрҙә һаҡларға, аргумент сифатында тапшырырға һәм башҡалар эшләргә мөмкин.
3. Рекурсия. Рекурсия Lisp-ҡа тиклем үк математик төшөнсә булараҡ йәшәгән, әлбиттә, әммә Lisp уға булышлыҡ иткән тәүге программалау теле булды. (Был функцияларҙы беренсе класлы объекттар итеүҙә үҙенән-үҙе күҙ уңында тотола тип әйтергә мөмкин.)
4. Үҙгәреүсәндәр тураһында яңы төшөнсә. Lisp-та бөтә үҙгәреүсәндәр ҙә ғәмәлдә күрһәткестәр булып тора. Типтар үҙгәреүсәндәргә түгел, ә ҡиммәттәргә ҡарай, һәм үҙгәреүсәндәрҙе билдәләү йәки бәйләү күрһәткестәрҙең үҙҙәрен күсереүҙе аңлата, улар күрһәткән нәмәне түгел.
5. Сүп-сар йыйыу (Garbage-collection).
6. Аңлатмаларҙан торған программалар. Lisp программалары — һәр береһе ҡиммәт ҡайтара торған аңлатмалар ағасы. (Ҡайһы бер Lisp варианттарында аңлатмалар бер нисә ҡиммәт ҡайтара ала.) Был аңлатмалар менән операторҙар (инструкциялар) араһында айырма яһаған Fortran һәм унан һуңғы күпселек телдәрҙән айырылып тора.
Fortran-да бындай айырма булыуы тәбиғи ине, сөнки (индереү форматы перфокарталар булған телдә был ғәжәп түгел) был тел юлдарға йүнәлтелгән ине. Операторҙарҙы бер-береһенең эсенә ҡуйып булмай ине. Шуға күрә математика эшләһен өсөн һеҙгә аңлатмалар кәрәк булһа ла, башҡа берәй нәмәнең ҡиммәт ҡайтарыуында мәғәнә юҡ ине, сөнки уны көтөп торған бер нәмә лә була алмай ине.
Был сикләү блок-структуралы телдәр барлыҡҡа килеү менән юҡҡа сыҡты, әммә ул ваҡытта инде һуң ине. Аңлатмалар һәм операторҙар араһындағы айырма ныҡлап нығынды. Ул Fortran-дан Algol-ға күсте һәм унан икеһенең дә вариҫтарына таралды.
Тел тулыһынса аңлатмаларҙан торғанда, һеҙ аңлатмаларҙы үҙегеҙ теләгәнсә ҡуша алаһығыҙ. Һеҙ йә былай (Arc синтаксисын ҡулланып)
(if foo (= x 1) (= x 2))
йәки былай тип яҙа алаһығыҙ:
(= x (if foo 1 2))
7. Символ тибы. Символдар юлдарҙан шуның менән айырыла: һеҙ тигеҙлекте күрһәткесте сағыштырып ҡына тикшерә алаһығыҙ.
8. Символдар ағасын ҡулланыусы код яҙылышы.
9. Бөтә телдең һәр ваҡыт ҡул аҫтында булыуы. Уҡыу ваҡыты (read-time), компиляция ваҡыты (compile-time) һәм башҡарыу ваҡыты (runtime) араһында ысынбарлыҡта бер ниндәй айырма юҡ. Һеҙ кодты уҡыған ваҡытта уҡ компиляциялай йәки башҡара алаһығыҙ, компиляциялаған ваҡытта кодты уҡый йәки башҡара алаһығыҙ, һәм программа эшләгән ваҡытта уны уҡый йәки компиляциялай алаһығыҙ.
Кодты уҡыу ваҡытында башҡарыу ҡулланыусыларға Lisp синтаксисын үҙгәртергә мөмкинлек бирә; компиляция ваҡытында код башҡарыу — макростарҙың нигеҙе; башҡарыу ваҡытында компиляциялау Lisp-тың Emacs кеүек программаларҙа киңәйтеү теле булараҡ ҡулланылыуының нигеҙе булып тора; ә башҡарыу ваҡытында уҡыу программаларға s-аңлатмалар ярҙамында үҙ-ара бәйләнешкә инергә мөмкинлек бирә — был идея яңыраҡ XML булараҡ яңынан уйлап табылды.
Lisp тәү башлап уйлап табылғанда, был идеяларҙың барыһы ла 1950-се йылдар аҙағында булған аппарат тәьминәте тарафынан билдәләнгән ғәҙәти программалау практикаһынан бик алыҫ ине.
Ваҡыт үтеү менән, популяр телдәр сылбырында сағылған «ғәҙәти» тел әкренләп Lisp яғына табан үҫеште. 1–5 пункттары хәҙер киң таралған. 6-сыһы төп ағымда барлыҡҡа килә башланы. Python-да 7-сенең бер төрө бар, әммә уның өсөн синтаксис юҡ кеүек. 8-се пункт (9 менән бергә Lisp макростарын мөмкин иткән нәмә) әлегә тиклем фәҡәт Lisp-ҡа ғына хас булып ҡала, бәлки сөнки (а) ул шул йәйәләрҙе йәки шундай уҡ яман бер нәмәне талап итә, һәм (б) әгәр һеҙ был һуңғы ҡөҙрәт өҫтәмәһен индерһәгеҙ, һеҙ яңы тел уйлап таптым тип түгел, ә тик Lisp-тың яңы диалектын төҙөнөм тип кенә әйтә алаһығыҙ ; -)
Бөгөнгө программалаусылар өсөн файҙалы булһа ла, Lisp-ты башҡа телдәр ҡабул иткән осраҡлы яйлашыуҙарҙан айырмаһы аша һүрәтләү сәйер. Маккарти уны, моғайын, бөтөнләй улай тип күҙ алдына килтермәгәндер. Lisp Fortran-дағы хаталарҙы төҙәтеү өсөн эшләнмәгән; ул күберәк иҫәпләүҙәрҙе аксиомалаштырыу ынтылышының өҫтәмә һөҙөмтәһе булараҡ барлыҡҡа килгән.