Lisp'i xüsusi edən nədir

«İndiyə qədər yaradılmış ən böyük proqramlaşdırma dillərindən biri«
— Alan Kay, «Lisp haqqında»

Lisp'i xüsusi edən nədir

McCarthy'nin 1950-ci illərin sonunda Lisp'i inkişaf etdirdiyi zaman, o, mövcud dillərdən kəskin şəkildə fərqlənirdi, ən başlıcası Fortran.

Lisp doqquz yeni fikri birləşdirdi:

1. Şərti ifadələr (Conditionals). Şərti ifadələr if-then-else konstruksiyasıdır. İndi onları adi hal kimi qəbul edirik. Onlar ixtira edilmişdir McCarthy tərəfindən Lisp'in hazırlanması zamanı. (O vaxt Fortran yalnız ata-çıxış ifadələrini, dəmir avadanlığa bağlı olan dalğalanma əmrlərinə bağlıydı.) McCarthy, Algol komitəsində olduğu zaman, şərti ifadələri Algol'a daxil etdi, buradan isə onlar digər dillərə yayıldı.

2. Funksional tiplər (A function type). Lisp'də funksiyalar birinci dərəcəli obyektlərdir — onlar məlumat tipi olaraq ədədlər, sətirlər və s. kimi mövcuddur, real təsviri vardır, dəyişkənlərdə saxlanıla bilər, arqumentlər kimi ötürülə bilər və s.

3. Təkrarlama (Recursion). Təkrarlama, əlbəttə ki, Lisp'dən əvvəl riyaziyyat anlayışı olaraq mövcud idi, amma Lisp onu dəstəkləyən ilk proqramlaşdırma dili oldu. (Bu, birinci dərəcəli obyektlər kimi funksiyaların yaradılmasında nəzərdə tutulmuş ola bilər.)

4. Yeni dəyişkənlər anlayışı (A new concept of variables). Lisp'də bütün dəyişkənlər effektiv göstəricilərdir. Dəyərlər tiplərdə var, dəyişkənlərdə yox, və dəyişkənlərin təyin edilməsi və ya bağlanması göstəricilərin köçürülməsi deməkdir, göstərdikləri deyil.

5. Zibil toplanması (Garbage-collection).

6. İfadələrdən ibarət proqramlar (Programs composed of expressions). Lisp'də proqramlar ifadələr ağaclarıdır, hər biri müəyyən bir dəyər qaytarır. (Bəzi Lisp ifadələri bir neçə dəyər qaytara bilər.) Bu, Fortran və bir çox digər uğurlu dillərlə fərq edir, bunlar «ifadələr» və «iddialar»ı fərqləndirir.

Fortran'da belə bir fərq olmağı təbii idi, çünki dil xətti yönlü idi (kartla giriş formatının olması da təəccüblü deyil). Siz iç-içə iddialara sahib ola bilmirdiniz. Və sizə işləmək üçün riyazi ifadələr lazım olduğu zaman, heç bir şeyin dəyəri qaytarmasına zorlamağın mənası yox idi, çünki bunun gözlədiyi bir şey olmaya bilərdi.

Blok-strukturlaşdırılmış dillərin ortaya çıxması ilə bu məhdudiyyətlər aradan qaldırıldı, lakin artıq çox gec idi. İfadələr və iddialar arasındakı fərq artıq möhkəmlənmişdi. Bu, Fortran'dan Algol'a və oradan da onların soyuna keçdi.

Bütün dil ifadələrdən tamamilə ibarət olduqda, siz ifadələri istədiyiniz kimi yaza bilərsiniz. Siz ya da yazırsınız (sintaksisdən istifadə edərək Arc)

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

ya da

(= x (if foo 1 2))

7. Simvol tipi (A symbol type)Simvollar sətirlərdən fərqlənir, bu halda bərabərlik üçün göstəriciləri müqayisə edə bilərsiniz.

8. Kod üçün notasiya simvolların ağaclarının istifadəsi ilə.

9. Bütün dil həmişə mövcuddur.Oxuma vaxtı, tərtib edilməsi vaxtı və icra vaxtı arasında aydın fərq yoxdur. Siz kodu oxuyarkən tərtib edə və ya icra edə bilərsiniz, ya da tərtib edərkən, ya da icra edərkən kod oxuya bilərsiniz.

Oxuma vaxtında kodun icrası istifadəçilərə Lisp-in sintaksisini yenidən proqramlaşdırmağa imkan verir; tərtib etmə vaxtında kodun icrası makrosların əsasını təşkil edir; icra zamanı tərtib etmə Lisp-in Emacs kimi proqramlarda genişlənmə dili kimi istifadə edilməsini mümkün edir; və nəhayət, icra olunan zaman oxuma proqramların s-ifadələrini istifadə edərək qarşılıqlı əlaqədə olmasına imkan verir, bu fikir XML-də son zamanlar yenidən kəşf edilmişdir.

Nəticə

Lisp ilk dəfə ixtira edildikdə, bütün bu fikirlər 1950-ci illərin sonlarında mövcud olan avadanlıqlar tərəfindən idarə olunan proqramlaşdırma praktikalarından xeyli uzaq idi.

Zamanla, uğurlu dillərin tətbiq olunmasında default dil Lisp yönündə tədricən evrilmişdir. 1-5-ci bəndlər artıq geniş yayılmışdır. 6-cı bənd mərkəzi diqqətə gəlməyə başlayır. Python-da 7-ci bəndin bir növü var, baxmayaraq ki, uyğun sintaksis yoxdur. 8-ci bənd, 9-cu bəndlə birlikdə, Lisp-də makroların mümkün olmasına səbəb olur, hələ də yalnız Lisp-dadır, yəqin ki, (a) bu möhtəşəm parantezləri tələb etdiyi və (b) bu son güc artırmasını əlavə etdiyinizdə, yeni dil ixtira etmədiyinizi, yalnız yeni bir Lisp dialekti inkişaf etdirdiyinizi iddia edə bilməzsiniz; -)

Bunun müasir proqramçılar üçün faydalı olmasına baxmayaraq, Lisp-i digər dillərdə qəbul edilmiş təsadüfi yanaşmaların fərqi kontekstində təsvir etmək qəribədir. Bəlkə də bu, McCarthy-nin düşündüyü şey deyildi. Lisp, Fortran-dakı səhvləri düzəltmək üçün nəzərdə tutulmamışdı; daha çox, bir cəhətdən, hesablamaları aksiomatlaşdırmaq cəhdi kimi ortaya çıxdı..

Mənbə: habr.com

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster