Scheme
Парадіґма | функціонална |
---|---|
Обявив ся в | 1975 |
Дізайноване од | Guy L. Steele and Gerald Jay Sussman |
Стабілне выданя | R6RS (ratified standard) (2007) |
Тіпізація дат | strong, dynamic |
Основна реалізація | Много. Видь Category:Scheme implementations |
Діалекты | T |
Овпливненый з | Lisp, ALGOL |
Овпливнив | Common Lisp, JavaScript, R, Ruby, Dylan, Lua, Hop, Racket |
Вебсайт | http://www.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)
Наслїдній приклад указує дефініцію функції, котра вырахує факторіал зазначеного чісла:
(define fact
(lambda (n)
(if (= n 0)
1
(* n (fact (- n 1))))))
Писаня конштрукції lambda мож быти довготырваюче, і зато Scheme нукать скороченя:
(define (fact n)
(if (= n 0)
1
(* n (fact (- n 1)))))
Функція ся дасть потім закликати:
(fact 4)
На выступі бы сьме дістали чісло 24. Выше зазначеный приклад указу/ пару інтересных конштрукцій. Єднак є ясне, же в языку Scheme ся хоснує префіксовый запис:
(+ 1 2) ; сума
(- 5 3) ; розность
(* 4 5) ; умножіня
(/ 9 3) ; дїлїня
(+ 1 3 7) ; не треба ся обмеджовати лем на дві чісла
Другов інтереснов річов є подмінка if. Тота має способ (if (výraz) true false), де ветва true ся проведе, кідь є выраз правдивый (кідь не є посудженый як #f), ветва false в припадї, же є выраз неправдивый (#f; еквівалентне части else в іншых языках).
Третёв інтереснов річов є рекурзівне кликаня себе самого на пятім рядку дефініції функції. Функція про рахованя факторіалу ся дасть переписати:
(define (fact n)
(let fact-iter ((n n)
(result 1))
(if (= n 0)
result
(fact-iter (- n 1) (* n result)))))
В такім припадї будуть вшыткы рекурзівны кликаня концово рекурзівны. Дочасны параметры не суть укладаны на засобник, але суть передаваны як арґументы рекурзівной функції і інтерпрет може зашмарити обсяг засобника і знову закликати функцію. То значіть же рахованя функції ся дїє в конштантім простору памятї. Штандарт языка Scheme R5RS, точно дефінує, коли дійде ку консовому кликаню. В прикладі коду є тыж хоснована конштрукція „пописаный лїт“, котра ся хоснує про створїня рекурзії в тїли функції без того, жебы сьме імпліцітно дефіновали функцію в ґлобалнім средстві.
|