Scheme — (мультипарадигмова мова програмування), підтримує функціональну та процедурну парадигми програмування. Словник мови можна розширювати засобами самої мови. Існують розширення, які додають підтримку об'єктноорієнтованої, декларативної і інших парадигм програмування. Є діалектом мови програмування Лісп.
Scheme | |
---|---|
Парадигма | декілька |
Дата появи | 1970-ті |
Творці | та |
Останній реліз | |
Система типізації | сувора, динамічна |
Основні реалізації | , , , , , Guile, , , , , , , |
Діалекти | |
Під впливом від | Lisp, Алгол |
Вплинула на | Common Lisp, JavaScript, Ruby, Dylan |
Звичайні розширення файлів | .scm або .ss |
Вебсайт | scheme-reports.org |
|
Історія створення
Перший опис Scheme написано в 1975 році. Творцями мови є (англ. Guy L. Steele) та (англ. Gerald Jay Sussman) з Массачусетського технологічного інституту. В 1981 та 1982 роках почались три різних проєкти з використання Scheme для навчального процесу в університетах США.
Мова програмування Scheme визначається двома стандартами: стандартом де-юре в редакції IEEE, та стандартом де-факто. Поточна версія описання стандарту де-факто має назву «Revised 5 Report on the Algorithmic Language Scheme». 28 серпня 2007 року було затверджено наступну редакцію: R6RS.
Основну увагу, при створенні діалекту, було приділено елегантності та концептуальній довершеності мови. Як наслідок, повна специфікація мови програмування Scheme вмістилася в 50 сторінок, в той час, як специфікація Common Lisp має розмір 1300 сторінок.
Стислий опис
Як і в Алголі, області видимості в Scheme статичні, кожне використання змінної відповідає лексично видимому значенню цієї змінної.
Типи асоціюються зі значеннями (об'єктами), а не зі змінними. Іншими словами, Scheme — мова програмування із динамічною типізацією. Однак, існують діалекти Scheme зі статичною типізацією.
Всі об'єкти, які створюються під час виконання програми, включаючи процедури та продовження існують до її завершення. Жоден з об'єктів не знищується. Однак, інтерпретаторам та компіляторам Scheme дозволяється звільняти місце, зайняте об'єктом у випадку, якщо вони можуть довести що цей об'єкт в програмі більше не використовується. Цю задачу звільнення місця в пам'яті від невикористовуваних об'єктів виконує прибиральник сміття.
Процедури в Scheme є повноцінними об'єктами. Процедури можна створювати під час виконання програми, зберігати в структурах даних, повертати як результат роботи інших процедур, і так далі.
Однією із відмінних рис Scheme є те, що продовження також мають статус звичайних об'єктів. Продовження корисні для реалізації багатьох складних конструкцій керування, включаючи нелокальні виходи (non-local exits), зворотне виконання (backtracking), та співпрограми (coroutines).
Аргументи завжди передаються в процедури за значенням. Це значить, що всі значення аргументів обчислюються до того, як буде передано керування до процедури, не зважаючи на те, чи використовуються ці аргументи під час виконання процедури. Це відрізняється від семантики лінивого обчислення мови програмування Haskell, або семантики виклику на ім'я Algol 60, в якій значення виразу аргументу обчислюється тільки в разі використання в процедурі.
Модель арифметики Scheme розроблялась таким чином, щоб залишатись як можна незалежнішою від представлення чисел в комп'ютері. В Scheme, кожне ціле є раціональним числом, кожне раціональне є дійсним, а кожне дійсне — комплексне. Тому, різниця між арифметикою дійсних та комплексних чисел, яка присутня в інших мовах програмування, для Scheme не виникає. Замість цього розрізняється точна арифметика (яка відповідає математичним ідеалам), та наближена (яка базується на апроксимаціях). Як і в Common Lisp, точна арифметика не обмежується операціями з цілими числами.
В Scheme наявні оператори циклів. Ще одним способом організації циклічності виконання певного блоку є використання рекурсивних процедур. Всі реалізації Scheme мають виконувати правильну оптимізацію хвостової рекурсії.
Приклади програм
Наприклад, функція обчислення значення факторіалу з використанням операторів циклу матиме вигляд:
(define (factorial n) (let loop ((total 1) (i n)) (if (= i 0) total (loop (* i total) (- i 1)))))
Однак, цю функцію можна переписати із використанням рекурсії:
(define (factorial n) (if (= n 0) 1 (* n (factorial (- n 1)))))
Тут рекурсивний виклик знаходиться у хвості тіла процедури, але не є останньою дією функції, тобто, не є прикладом хвостової рекурсії.
Інтерпретатори та компілятори
Для мови програмування Scheme існує велика кількість інтерпретаторів та компіляторів. Деякі інтерпретатори використовуються в інших програмах для написання макросів і розширення функціональності (наприклад, у графічному редакторі GIMP використовується інтерпретатор ). Для повного переліку, дивіться відповідну сторінку ЧАПів [ 18 лютого 2010 у Wayback Machine.].
Засоби розробки
Для Scheme, також, існує велика кількість допоміжних засобів розробки, інтегрованих середовищ. До інтегрованих середовищ належить Dr. Scheme [ 17 травня 2008 у Wayback Machine.]. Для GNU Emacs та існує спеціальний основний режим: scheme-mode [ 11 жовтня 2006 у Wayback Machine.].
Джерела
- Richard Kelsey, William Clinger, Jonathan Rees та ін. (August 1998). . Higher-Order and Symbolic Computation. 11 (1): 7—105. doi:10.1023/A:1010051815785. Архів оригіналу за 5 січня 2007. Процитовано 4 грудня 2007.
{{}}
: Явне використання «та ін.» у:|author=
() - R6RS.org. Архів оригіналу за 25 червня 2013. Процитовано 4 грудня 2007.
Література
- Revised 5 Report on the Alogrithmic Language Scheme, Richard Kelsey, William Clinger, Jonathan Rees, 1998.
- Teach Yourself Scheme in Fixnum Days, Dorai Sitaram, 2004.
Див. також
- Common Lisp — інший популярний діалект мови програмування Лісп.
- Lisp
- Лямбда-числення
Посилання
- schemers.org [ 31 грудня 2006 у Wayback Machine.] Спільнота Scheme програмістів.(англ.)
- ЧАПи: перелік реалізацій [ 18 лютого 2010 у Wayback Machine.].
- Open Directory: Scheme [ 15 червня 2006 у Wayback Machine.] посилання на різноманітні ресурси присвячені Scheme.
Це незавершена стаття про мови програмування. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Scheme multiparadigmova mova programuvannya pidtrimuye funkcionalnu ta procedurnu paradigmi programuvannya Slovnik movi mozhna rozshiryuvati zasobami samoyi movi Isnuyut rozshirennya yaki dodayut pidtrimku ob yektnooriyentovanoyi deklarativnoyi i inshih paradigm programuvannya Ye dialektom movi programuvannya Lisp SchemeParadigma dekilkaData poyavi 1970 tiTvorci taOstannij relizSistema tipizaciyi suvora dinamichnaOsnovni realizaciyi Guile DialektiPid vplivom vid Lisp AlgolVplinula na Common Lisp JavaScript Ruby DylanZvichajni rozshirennya fajliv scm abo ssVebsajt scheme reports org Mediafajli u VikishovishiIstoriya stvorennyaPershij opis Scheme napisano v 1975 roci Tvorcyami movi ye angl Guy L Steele ta angl Gerald Jay Sussman z Massachusetskogo tehnologichnogo institutu V 1981 ta 1982 rokah pochalis tri riznih proyekti z vikoristannya Scheme dlya navchalnogo procesu v universitetah SShA Mova programuvannya Scheme viznachayetsya dvoma standartami standartom de yure v redakciyi IEEE ta standartom de fakto Potochna versiya opisannya standartu de fakto maye nazvu Revised 5 Report on the Algorithmic Language Scheme 28 serpnya 2007 roku bulo zatverdzheno nastupnu redakciyu R6RS Osnovnu uvagu pri stvorenni dialektu bulo pridileno elegantnosti ta konceptualnij dovershenosti movi Yak naslidok povna specifikaciya movi programuvannya Scheme vmistilasya v 50 storinok v toj chas yak specifikaciya Common Lisp maye rozmir 1300 storinok Stislij opisYak i v Algoli oblasti vidimosti v Scheme statichni kozhne vikoristannya zminnoyi vidpovidaye leksichno vidimomu znachennyu ciyeyi zminnoyi Tipi asociyuyutsya zi znachennyami ob yektami a ne zi zminnimi Inshimi slovami Scheme mova programuvannya iz dinamichnoyu tipizaciyeyu Odnak isnuyut dialekti Scheme zi statichnoyu tipizaciyeyu Vsi ob yekti yaki stvoryuyutsya pid chas vikonannya programi vklyuchayuchi proceduri ta prodovzhennya isnuyut do yiyi zavershennya Zhoden z ob yektiv ne znishuyetsya Odnak interpretatoram ta kompilyatoram Scheme dozvolyayetsya zvilnyati misce zajnyate ob yektom u vipadku yaksho voni mozhut dovesti sho cej ob yekt v programi bilshe ne vikoristovuyetsya Cyu zadachu zvilnennya miscya v pam yati vid nevikoristovuvanih ob yektiv vikonuye pribiralnik smittya Proceduri v Scheme ye povnocinnimi ob yektami Proceduri mozhna stvoryuvati pid chas vikonannya programi zberigati v strukturah danih povertati yak rezultat roboti inshih procedur i tak dali Odniyeyu iz vidminnih ris Scheme ye te sho prodovzhennya takozh mayut status zvichajnih ob yektiv Prodovzhennya korisni dlya realizaciyi bagatoh skladnih konstrukcij keruvannya vklyuchayuchi nelokalni vihodi non local exits zvorotne vikonannya backtracking ta spivprogrami coroutines Argumenti zavzhdi peredayutsya v proceduri za znachennyam Ce znachit sho vsi znachennya argumentiv obchislyuyutsya do togo yak bude peredano keruvannya do proceduri ne zvazhayuchi na te chi vikoristovuyutsya ci argumenti pid chas vikonannya proceduri Ce vidriznyayetsya vid semantiki linivogo obchislennya movi programuvannya Haskell abo semantiki vikliku na im ya Algol 60 v yakij znachennya virazu argumentu obchislyuyetsya tilki v razi vikoristannya v proceduri Model arifmetiki Scheme rozroblyalas takim chinom shob zalishatis yak mozhna nezalezhnishoyu vid predstavlennya chisel v komp yuteri V Scheme kozhne cile ye racionalnim chislom kozhne racionalne ye dijsnim a kozhne dijsne kompleksne Tomu riznicya mizh arifmetikoyu dijsnih ta kompleksnih chisel yaka prisutnya v inshih movah programuvannya dlya Scheme ne vinikaye Zamist cogo rozriznyayetsya tochna arifmetika yaka vidpovidaye matematichnim idealam ta nablizhena yaka bazuyetsya na aproksimaciyah Yak i v Common Lisp tochna arifmetika ne obmezhuyetsya operaciyami z cilimi chislami V Scheme nayavni operatori cikliv She odnim sposobom organizaciyi ciklichnosti vikonannya pevnogo bloku ye vikoristannya rekursivnih procedur Vsi realizaciyi Scheme mayut vikonuvati pravilnu optimizaciyu hvostovoyi rekursiyi Prikladi programNapriklad funkciya obchislennya znachennya faktorialu z vikoristannyam operatoriv ciklu matime viglyad define factorial n let loop total 1 i n if i 0 total loop i total i 1 Odnak cyu funkciyu mozhna perepisati iz vikoristannyam rekursiyi define factorial n if n 0 1 n factorial n 1 Tut rekursivnij viklik znahoditsya u hvosti tila proceduri ale ne ye ostannoyu diyeyu funkciyi tobto ne ye prikladom hvostovoyi rekursiyi Interpretatori ta kompilyatoriDlya movi programuvannya Scheme isnuye velika kilkist interpretatoriv ta kompilyatoriv Deyaki interpretatori vikoristovuyutsya v inshih programah dlya napisannya makrosiv i rozshirennya funkcionalnosti napriklad u grafichnomu redaktori GIMP vikoristovuyetsya interpretator Dlya povnogo pereliku divitsya vidpovidnu storinku ChAPiv 18 lyutogo 2010 u Wayback Machine Zasobi rozrobkiDlya Scheme takozh isnuye velika kilkist dopomizhnih zasobiv rozrobki integrovanih seredovish Do integrovanih seredovish nalezhit Dr Scheme 17 travnya 2008 u Wayback Machine Dlya GNU Emacs ta isnuye specialnij osnovnij rezhim scheme mode 11 zhovtnya 2006 u Wayback Machine DzherelaRichard Kelsey William Clinger Jonathan Rees ta in August 1998 Higher Order and Symbolic Computation 11 1 7 105 doi 10 1023 A 1010051815785 Arhiv originalu za 5 sichnya 2007 Procitovano 4 grudnya 2007 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite journal title Shablon Cite journal cite journal a Yavne vikoristannya ta in u author dovidka R6RS org Arhiv originalu za 25 chervnya 2013 Procitovano 4 grudnya 2007 LiteraturaRevised 5 Report on the Alogrithmic Language Scheme Richard Kelsey William Clinger Jonathan Rees 1998 Teach Yourself Scheme in Fixnum Days Dorai Sitaram 2004 Div takozhCommon Lisp inshij populyarnij dialekt movi programuvannya Lisp Lisp Lyambda chislennyaPosilannyaschemers org 31 grudnya 2006 u Wayback Machine Spilnota Scheme programistiv angl ChAPi perelik realizacij 18 lyutogo 2010 u Wayback Machine Open Directory Scheme 15 chervnya 2006 u Wayback Machine posilannya na riznomanitni resursi prisvyacheni Scheme Ce nezavershena stattya pro movi programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi