Lispni nima o'ziga xos qildi

«Yaratilgan eng buyuk dasturlash tili«
- Alan Kay, "Lispda"

Lispni nima o'ziga xos qildi

Makkarti 1950-yillarning oxirida Lispni ishlab chiqqanida, u mavjud tillardan tubdan farq qilar edi, ulardan eng muhimi edi. Fortran.

Lisp to'qqizta yangi g'oyani taqdim etdi:

1. Shartlar. Shartli gaplar, agar-thenelse konstruksiyalaridir. Endi biz ularni odatdagidek qabul qilamiz. Ular ... bo'lgandi ixtiro qilgan Makkarti Lispning rivojlanishi davrida. (O'sha paytda Fortranda faqat goto ko'rsatmalari bor edi, ular asosiy apparat bo'yicha filial yo'riqnomasi bilan chambarchas bog'langan.) Makkarti Algol qo'mitasida bo'lganida, Algolga shartlar qo'shgan va u erdan ular boshqa tillarga tarqalib ketgan.

2. Funktsiya turi. Lispda funksiyalar birinchi darajali ob'ektlardir - ular xuddi raqamlar, satrlar va boshqalar kabi ma'lumotlar turi bo'lib, to'g'ridan-to'g'ri ifodaga ega, o'zgaruvchilarda saqlanishi, argument sifatida uzatilishi mumkin va hokazo.

3. Rekursiya. Rekursiya, albatta, Lispdan oldin matematik tushuncha sifatida mavjud edi, lekin Lisp uni qo'llab-quvvatlagan birinchi dasturlash tili edi. (Bu, ehtimol, birinchi darajali ob'ektlar sifatida funktsiyalarni yaratishda nazarda tutilgan.)

4. O'zgaruvchilarning yangi tushunchasi. Lispda barcha o'zgaruvchilar samarali ko'rsatkichlardir. Qiymatlar o'zgaruvchilar emas, balki qaysi turlarga ega bo'lishidir va o'zgaruvchilarni belgilash yoki bog'lash ko'rsatgichlarni ko'rsatadigan narsani emas, balki nusxalashni anglatadi.

5. Axlat yig'ish.

6. Ifodalardan tashkil topgan dasturlar. Lisp dasturlari ifodalar daraxtlari bo'lib, ularning har biri qiymat qaytaradi. (Ba'zi Lisp iboralari bir nechta qiymatlarni qaytarishi mumkin.) Bu Fortran va "iboralar" va "bayonotlar" o'rtasidagi farqni ko'rsatadigan boshqa ko'plab muvaffaqiyatli tillardan farq qiladi.

Fortranda bu farqning mavjudligi tabiiy edi, chunki til chiziqqa yo'naltirilgan edi (kiritish formati perfokarta bo'lgan til uchun ajablanarli emas). Siz iboralarni joylashtira olmaysiz. Ishlash uchun matematik ifodalar kerak ekan, boshqa hech narsa qiymatni qaytarishning ma'nosi yo'q edi, chunki qaytarilishini kutayotgan hech narsa bo'lmasligi mumkin.

Blok-strukturali tillarning paydo bo'lishi bilan cheklovlar olib tashlandi, ammo bu vaqtga kelib juda kech edi. Ifodalar va bayonotlar o'rtasidagi farq allaqachon o'rnatilgan. Fortrandan Algolga, keyin esa ularning avlodlariga o'tdi.

Til butunlay iboralardan iborat bo'lsa, siz xohlagan tarzda iboralarni yaratishingiz mumkin. Siz ikkalasini ham yozishingiz mumkin (sintaksisi yordamida yoy)

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

yoki

(= x (if foo 1 2))

7. Belgi turi. Belgilar satrlardan farq qiladi, bu holda siz ko'rsatkichlarni taqqoslash orqali tenglikni tekshirishingiz mumkin.

8. Kod uchun belgi belgilar daraxtlaridan foydalanish.

9. Butun til har doim mavjud. O'qish vaqti, kompilyatsiya vaqti va ishlash vaqti o'rtasida aniq farq yo'q. Siz o'qiyotganingizda kodni kompilyatsiya qilishingiz yoki ishga tushirishingiz, kompilyatsiya paytida kodni o'qishingiz yoki ishga tushirishingiz yoki ishlayotgan vaqtda kodni o'qishingiz yoki kompilyatsiya qilishingiz mumkin.

O'qish paytida ishlaydigan kod foydalanuvchilarga Lisp sintaksisini qayta dasturlash imkonini beradi; kompilyatsiya vaqtida ishlaydigan kod makrolar uchun asosdir; ish vaqti kompilyatsiyasi Lisp dan Emacs kabi dasturlarda kengaytma tili sifatida foydalanish uchun asosdir; va nihoyat, ish vaqtini o'qish dasturlarga s-ifodalar yordamida muloqot qilish imkonini beradi, bu g'oya yaqinda XMLda qayta ixtiro qilingan.

xulosa

Lisp birinchi marta ixtiro qilinganida, bu g'oyalar 1950-yillarning oxirida mavjud bo'lgan apparat tomonidan belgilab qo'yilgan an'anaviy dasturlash amaliyotidan ancha uzoq edi.

Vaqt o'tishi bilan mashhur tillarning muvaffaqiyati bilan ifodalangan standart til asta-sekin Lisp tomon rivojlandi. 1-5-bandlar endi keng tarqalgan. 6-band asosiy oqimda paydo bo'la boshlaydi. Python-da biron bir shaklda 7-band mavjud, ammo mos sintaksis mavjud emas. (8-band bilan) Lisp-da makroslarni yaratishga imkon beradigan 9-band hali ham faqat Lisp-da, ehtimol (a) bu qavslar yoki shunga o'xshash yomon narsalarni talab qilgani uchun va (b) agar siz ushbu so'nggi quvvatni oshirishni qo'shsangiz, mumkin endi yangi til ixtiro qilganliklarini da'vo qilmaydilar, faqat Lispning yangi lahjasini ishlab chiqdilar; -)

Bu zamonaviy dasturchilar uchun foydali bo'lsa-da, Lispni boshqa tillarda qabul qilingan tasodifiy usullardan farqi nuqtai nazaridan ta'riflash g'alati. Bu Makkarti o'ylamagan bo'lishi mumkin. Lisp Fortran xatolarini tuzatish uchun mo'ljallanmagan; u ko'proq urinishning qo'shimcha mahsuloti sifatida paydo bo'ldi hisob-kitoblarni aksiomatizatsiya qilish.

Manba: www.habr.com

a Izoh qo'shish