Перейти до вмісту

Scheme

Матеріал з Вікіпедія
Scheme
Парадіґмафункціонална
Обявив ся в1975
Дізайноване одGuy L. SteeleandGerald Jay Sussman
Стабілне выданяR6RS (ratified standard) (2007)
Тіпізація датstrong,dynamic
Основна реалізаціяМного. ВидьCategory:Scheme implementations
ДіалектыT
Овпливненый зLisp,ALGOL
ОвпливнивCommon Lisp,JavaScript,R,Ruby,Dylan,Lua,Hop,Racket
Вебсайтhttp:// scheme-reports.org/

Schemeє мултіпарадіґматічный проґрамовачій язык. Фунціонална парадіґма належыть міджі такзваны декларатівны парадіґмата. Scheme є єден з двох головный діалектів функціоналного проґрамовачого языкаLisp.Язык предложыли Гай Луіс Стіл (Guy Lewis Steele) і Жералд Джей Сусман (Gerald Jay Sussman) і ёго першый попис быв списаный в роцї 1975. Scheme быв представленый академічному світу через серію статей, нынї знамых як Сусмановы і Стіловы Ламбда Папіря. Язык Scheme дефінують два штандарты: офіціалный IEEE штандарт і штандарт званый Revisedn Report on the Algorithmic Language Scheme, скорочено RnRS, де n є чісло ревізії. Сучасный штандарт єR5RSR6RSся вывивать.

Опроти Lisp-у ся Scheme снажыть о мінімалізм - додати што найменше чісло основных функцій, на котрых суть пак в книжніцях поставлены зложытїшы конштрукції. Вдяка тому має дотеперь послїдня референція языка лем 50 сторінок.


Scheme быв першым діалектом Lisp-у, котрый понукав вольбу міджі лексікалным або дінамічным россягом платности переменной. Тыж быв першым языком, котрый підпоровав „first-class continuation “.

Тот язык є в праксі хоснованый рідше, хоснує ся передовшыктым в школах про учіня проґрамованя алґорітмів. Найзнамішов імплементаціов є ґрафічный едіторGIMP,котрого додатковы засувный модулы і скріпты суть писаны в діалектї языка Scheme.

Традічный проґрамhello worldвызерать в языку Scheme наприклад так:

(define(hello)
(display"Агой світе!")
(newline))
(hello)

Не першім рядку дефініції процедурыhello,котра выпише текст „Агой світе! “і одрядкує. На четвертім рядку є пак тота процедура кликана.

Команд define служыть тыж про дефініцію переменных:

(defineпі3.14)

Наслїдній приклад указує дефініцію функції, котра вырахуєфакторіалзазначеного чісла:

(definefact
(lambda(n)
(if(=n0)
1
(*n(fact(-n1))))))

Писаня конштрукціїlambdaмож быти довготырваюче, і зато Scheme нукать скороченя:

(define(factn)
(if(=n0)
1
(*n(fact(-n1)))))

Функція ся дасть потім закликати:

(fact4)

На выступі бы сьме дістали чісло 24. Выше зазначеный приклад указу/ пару інтересных конштрукцій. Єднак є ясне, же в языку Scheme ся хоснує префіксовый запис:

(+12);сума
(-53);розность
(*45);умножіня
(/93);дїлїня

(+137);не треба ся обмеджовати лем на дві чісла

Другов інтереснов річов є подмінкаif.Тота має способ(if (výraz) true false),де ветваtrueся проведе, кідь є выраз правдивый (кідь не є посудженый як#f), ветваfalseв припадї, же є выраз неправдивый (#f;еквівалентне частиelseв іншых языках).

Третёв інтереснов річов єрекурзівнекликаня себе самого на пятім рядку дефініції функції. Функція про рахованя факторіалу ся дасть переписати:

(define(factn)
(letfact-iter((nn)
(result1))
(if(=n0)
result
(fact-iter(-n1)(*nresult)))))

В такім припадї будуть вшыткы рекурзівны кликаня концово рекурзівны. Дочасны параметры не суть укладаны на засобник, але суть передаваны як арґументы рекурзівной функції і інтерпрет може зашмарити обсяг засобника і знову закликати функцію. То значіть же рахованя функції ся дїє в конштантім простору памятї. Штандарт языка SchemeR5RS,точно дефінує, коли дійде ку консовому кликаню. В прикладі коду є тыж хоснована конштрукція „пописаный лїт “, котра ся хоснує про створїня рекурзії в тїли функції без того, жебы сьме імпліцітно дефіновали функцію в ґлобалнім средстві.