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 є чісло ревізії. Сучасный штандарт єR5RS,іR6RSся вывивать.
Опроти 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,точно дефінує, коли дійде ку консовому кликаню. В прикладі коду є тыж хоснована конштрукція „пописаный лїт “, котра ся хоснує про створїня рекурзії в тїли функції без того, жебы сьме імпліцітно дефіновали функцію в ґлобалнім средстві.
|