უკან დაბრუნება
რეკეტის მეგობრული შესავალი: Lisp-ის ოჯახის თანამედროვე ენა
SiTech AI Team3 წთ. საკითხავი

რეკეტის მეგობრული შესავალი: Lisp-ის ოჯახის თანამედროვე ენა

ბლოგზე geometridae გამოქვეყნდა Racket-ის შესავალი გზამკვლევი — ენისა, რომელიც 1958 წლის Lisp-ის ტრადიციას აგრძელებს და რომლითაც მკითხველს საკუთარი სინტაქსის დაწერა შეუძლია.

პროგრამირების ერთ-ერთი უძველესი და ყველაზე თავისებური ოჯახის — Lisp-ის — თანამედროვე წარმომადგენელს Racket-ს მიძღვნილი მეგობრული შესავალი გამოქვეყნდა ბლოგზე geometridae.bearblog.dev. ავტორის დაპირება მარტივია: ტექსტის ბოლოს მკითხველი უკვე საკუთარ სინტაქსს წერს.

ლისპიდან სქიმამდე და რეკეტამდე

Lisp 1958 წელს შექმნა ჯონ მაკართიმ MIT-ში. ეს მეორე უძველესი მაღალი დონის ენაა, რომელიც დღესაც გამოიყენება — მას მხოლოდ Fortran (1957) უსწრებს ერთი წლით. Python გამოჩნდა 1991 წელს, JavaScript — 1995 წელს.

სწორედ Lisp-ში დაიბადა ის იდეები, რომლებსაც დღეს თანამედროვე ვუწოდებთ: ნაგვის შემგროვებელი, პირვეკლასიანი ფუნქციები, REPL-ციკლი, მნიშვნელობის დამაბრუნებელი პირობითი გამოსახულებები და ჰომოიკონურობა — მდგომარეობა, როცა კოდი თავად ენის მონაცემთა სტრუქტურაა. 70–80-იან წლებში Lisp პირდაპირ აპარატურაზეც სრულდებოდა (Symbolics-ისა და LMI-ის Lisp-მანქანები), თუმცა „ხელოვნური ინტელექტის ზამთრის“ შემდეგ დაფინანსება დაშრა და ენამ ვარსკვლავური სტატუსი დაკარგა.

1975 წელს ჯერალდ სასმენმა და გაი სტილმა შექმნეს Scheme — მინიმალისტური, თითქმის მათემატიკური Lisp, რომელზეც დაწერილია კლასიკური წიგნი SICP. 1995 წელს მათიას ფელაიზენის ჯგუფმა შექმნა PLT Scheme, რომელსაც 2010 წელს Racket უწოდეს. დღეს ეს ბევრად მეტია ვიდრე Scheme — ეს ენა ენების ასაშენებლადაა, ხოლო მისი არაოფიციალური დევიზი ენაზე ორიენტირებული პროგრამირებაა.

ვინ იყენებს Lisp-ს დღეს

უფრო მეტი ადამიანი, ვიდრე ჩანს. Clojure წარმოებაში მუშაობს ბანკებში, ავიაკომპანიებსა და სტარტაპებში — ლათინური ამერიკის უმსხვილესი ციფრული ბანკი Nubank Clojure-ზეა აწყობილი. Common Lisp (SBCL კომპილატორით) კვლავ ცოცხალია ექსპერტულ სისტემებში, ფრენების დაგეგმვასა (ITA Software, რომელიც Google-მა შეიძინა და Google Flights-ს საფუძვლად დაედო).

მილიონობით ადამიანი ყოველდღე Lisp-ს შეუმჩნევლად ასრულებს — მათი რედაქტორი Emacs Lisp-ინტერპრეტატორია. GNU Guix მთლიანად Scheme-ზე კონფიგურირებული Linux-დისტრიბუციაა. Racket-ს აქვს ყოველწლიური კონფერენცია RacketCon და გამოიყენება ენების კვლევაში, ფორმალურ ვერიფიკაციაში (Rosette), ტიპოგრაფიასა და გამომცემლობაში (Pollen).

როგორ გამოიყურება კოდი

დაყენება ხუთ წუთს იკავებს: ინსტალატორი racket-lang.org-იდან და გარემო DrRacket ზემოთ განსაზღვრებების ველით და ქვემოთ REPL-ით. ფაილის პირველი ხაზია #lang racket — ეს არჩევს ენას, რადგან Racket ენების ქარხანაა.

წესი ერთ ხაზში ეტევა: ყველაფერი არის (ოპერატორი არგუმენტი1 არგუმენტი2…), გამონაკლისის გარეშე. (+ 1 2) იძლევა 3-ს, (* 3 (+ 2 2)) — 12-ს, (string-append "hello " "world") — „hello world“-ს. არ არსებობს ოპერატორების პრიორიტეტი ან განსაკუთრებული სინტაქსი; define მუდმივას ან ფუნქციას ქმნის, lambda — უსახელო ფუნქციას.

Lisp ნიშნავს სიების დამუშავებას: (first '(1 2 3)) აბრუნებს 1-ს, (rest '(1 2 3)) — (2 3)-ს, (cons 0 '(1 2 3)) — (0 1 2 3)-ს. map, filter და foldl სიების ამოცანების უმეტესობას ერთი for-ციკლის გარეშე წყვეტს. რეკურსია ბუნებრივია: ფაქტორიალი იწერება ისე, რომ ფუძის შემთხვევა და მისკენ სვლა პირდაპირ ჩანს, 2htdp/image ბიბლიოთეკით კი რამდენიმე სტრიქონში სიეპინსკის სამკუთხედს ხატავთ.

კულმინაცია მაკროებია: ბრჭყალი ' კოდს მონაცემად აქცევს, eval კი მონაცემს ისევ კოდად ასრულებს. define-syntax-rule-ის საშუალებით ენას საკუთარი while-ციკლის დამატებაც კი შეიძლება. ალან კეიმ Lisp-ს „პროგრამული უზრუნველყოფის მაქსველის განტოლებები“ უწოდა — პატარა ბირთვი, საიდანაც დანარჩენი გამოდის.

SSiTech

SiTech — AI-გაძლიერებული ვებ დეველოპმენტი

ვქმნით სწრაფ, თანამედროვე ვებსაიტებს და AI-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.