Лиспті не ерекше етті

«Ең үлкен бағдарламалау тілі бұрыннан жасалған«
— Алан Кэй, «on Lisp»

Лиспті не ерекше етті

1950 жылдардың аяғында Маккарти Лиспті дамытқан кезде ол бар тілдерден түбегейлі ерекшеленді, олардың ең маңыздысы Fortran.

Лисп тоғыз жаңа идеяны ұсынды:

1. Шарттар. Шартты сөйлемдер – if-then-else конструкциялары. Қазір біз оларды әдеттегідей қабылдаймыз. Олар болды ойлап тапты Лисптің дамуы кезінде Маккарти. (Ол кезде Фортранның негізгі аппараттық құрал бойынша тармақ нұсқауымен тығыз байланысқан goto мәлімдемелері ғана болды.) Маккарти Алгол комитетінде болған кезде Алголға шартты сөздерді қосты, олар басқа тілдерге тарады.

2. Функция түрі. Lisp-те функциялар бірінші класты объектілер болып табылады - олар сандар, жолдар және т.б. сияқты деректер типі және әріптік көрінісі бар, айнымалыларда сақталуы мүмкін, аргумент ретінде берілуі мүмкін және т.б.

3. Рекурсия. Әрине, рекурсия математикалық концепция ретінде Lisp-ке дейін болған, бірақ Lisp оны қолдаған алғашқы бағдарламалау тілі болды. (Бұл бірінші дәрежелі нысандар ретінде функцияларды жасауды білдіреді.)

4. Айнымалылар туралы жаңа түсінік. Lisp-те барлық айнымалылар тиімді көрсеткіштер болып табылады. Мәндер - бұл айнымалылар емес, қандай түрлер бар, ал айнымалыларды тағайындау немесе байланыстыру олар көрсететін нәрсені емес, көрсеткіштерді көшіруді білдіреді.

5. Қоқыс жинау.

6. Өрнектерден құралған бағдарламалар. Lisp бағдарламалары өрнектер ағаштары болып табылады, олардың әрқайсысы мәнді қайтарады. (Кейбір Lisp өрнектері бірнеше мәнді қайтара алады.) Бұл Fortran және «өрнектер» мен «мәлімдемелер» арасындағы айырмашылықты көрсететін көптеген басқа сәтті тілдерден айырмашылығы бар.

Фортранда бұл ерекшеліктің болуы табиғи болды, себебі тіл сызыққа бағытталған (енгізу пішімі перфокарта болатын тіл үшін таңқаларлық емес). Сізде кірістірілген мәлімдемелер болуы мүмкін емес. Жұмыс істеу үшін математикалық өрнектер қажет болғанша, мәнді қайтаратын ештеңенің мәні жоқ, себебі қайтарылуын күтіп тұрған ештеңе болмауы мүмкін.

Блоктық-құрылымдық тілдердің пайда болуымен шектеулер жойылды, бірақ ол кезде тым кеш болды. Өрнектер мен мәлімдемелер арасындағы айырмашылық қазірдің өзінде белгіленген. Ол Фортраннан Алголға және одан әрі олардың ұрпақтарына өтті.

Тіл толығымен өрнектерден жасалған кезде, өрнектерді қалағаныңызша құра аласыз. Сіз (синтаксисті пайдаланып) жаза аласыз Арк)

(if foo (= x 1) (= x 2))

немесе

(= x (if foo 1 2))

7. Символ түрі. Таңбалар жолдардан ерекшеленеді, бұл жағдайда көрсеткіштерді салыстыру арқылы теңдікті тексеруге болады.

8. Кодқа арналған белгі символдық ағаштарды қолдану.

9. Бүкіл тіл әрқашан қол жетімді. Оқу уақыты, компиляция уақыты және орындалу уақыты арасында айқын айырмашылық жоқ. Кодты оқу кезінде құрастыруға немесе іске қосуға, компиляция кезінде кодты оқуға немесе іске қосуға немесе іске қосылған кезде кодты оқуға немесе құрастыруға болады.

Оқу кезінде кодты іске қосу пайдаланушыларға Lisp синтаксисін қайта бағдарламалауға мүмкіндік береді; компиляция уақытында іске қосылған код макростар үшін негіз болып табылады; орындау уақытының компиляциясы Lisp тілін Emacs сияқты бағдарламаларда кеңейтім тілі ретінде пайдаланудың негізі болып табылады; және ақырында, орындалу уақытын оқу бағдарламаларға s-өрнектері арқылы байланысуға мүмкіндік береді, бұл идея жақында XML-де қайта ойлап тапты.

қорытынды

Lisp алғаш рет ойлап табылған кезде, бұл идеялар 1950 жылдардың аяғында қол жетімді аппараттық құралдармен белгіленетін кәдімгі бағдарламалау тәжірибесінен алыс болды.

Уақыт өте келе танымал тілдердің жетістігімен бейнеленген әдепкі тіл біртіндеп Lisp тіліне қарай дамыды. 1-5 тармақтар қазір кеңінен қабылданады. 6-тармақ негізгі ағымда пайда бола бастады. Python тілінде қолайлы синтаксис болмаса да, қандай да бір түрде 7-тармақ бар. (8-тармақпен бірге) Lisp-те макростарды жасауға мүмкіндік беретін 9-тармақ әлі күнге дейін тек Lisp-те, бәлкім, (a) бұл жақшаларды немесе бірдей нашар нәрсені қажет ететіндіктен және (b) қуаттың осы соңғы ұлғаюын қоссаңыз, енді жаңа тіл ойлап таптым деп емес, тек Лисптің жаңа диалектісін дамытты; -)

Бұл қазіргі бағдарламашылар үшін пайдалы болғанымен, Lisp-ті басқа тілдерде қабылданған кездейсоқ әдістерден айырмашылығы бойынша сипаттау біртүрлі. Бұл Маккарти ойлағандай болмауы мүмкін. Lisp Fortran қателерін түзетуге арналмаған; ол тырысудың жанама өнімі ретінде көбірек пайда болды есептеулерді аксиоматизациялау.

Ақпарат көзі: www.habr.com

пікір қалдыру