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

Scheme

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