Scheme (език за програмиране)
Scheme | |
Парадигма | Парадигма на програмиране (functional procedural meta) |
---|---|
Реализиране през | 1970 г. |
Автор | Guy L. Steele Gerald Jay Sussman |
Последна стабилна версия | R7RS (ratified standard) |
Платформа | lexical |
Файлово разширение | .scm .ss |
Scheme в Общомедия |
Scheme е функционален език за програмиране, диалект на LISP[1], разработен в технологичния институт в Масачузетс. Характерен е със своя минималистичен синтаксис. Подходящ е за първоначално запознаване с функционалното програмиране.
Глобални декларации
[редактиране | редактиране на кода]С ключовата дума define се създава променлива и се инициализира с дадена стойност.
(define a 7)
Възможна е и декларация на функция. В следния пример е декларирана функция square за повдигане дадено число на квадрат:
(define (square x)
(* x x))
Локално свързване
[редактиране | редактиране на кода]letrec
[редактиране | редактиране на кода]С letrec се осъществяват рекурсии.
(define (fak n)
(letrec ((F (lambda(x)
(if (= x 0) 1
(* x (F (- x 1)))))))
(F n)))
define
[редактиране | редактиране на кода]Освен за инициализаиране на глобални променливи и функции, с define могат да се дефинират и локани променливи, видими в блока, в който се намират. Така се постига по добра четливост на програмата и така се избягва използването на letrec.
(let ((x 5))
(define (foo y)
(bar x y))
(define (bar a b)
(+ (* a b) a))
(foo (+ x 3)))
Типове данни
[редактиране | редактиране на кода]Списъци
[редактиране | редактиране на кода]- list
Функцията list връща нов списък от аргументите си.
(list 1 2 3)
(list (list 1 2) (list 3 4))
- sublist
- list-ref
Функцията list-ref приема като аргументи списък и позиция в списъка. Връща елемента от списъка, който се намира на посочената позиция.
(list-ref (list 'а 'б 'в 'г) 1); връща 'б
- list-tail
- length
Функцията length взима като аргумент списък и връща неговата дължина.
(length (list 0 1 2 3 4)); дължината на списъка е 5
- cons
- car
- cdr
- append
- reverse
Други
[редактиране | редактиране на кода]- булев тип
Истина и неистина се отбелязват съответно с #t и #f.
- низове
Символните низове започват и завършват с ".
- символи
- числа
Цикли
[редактиране | редактиране на кода]Scheme няма конструкции за цикли. Когато се налага използването им се прибягва до рекурсия. Един безкраен цикъл изглежда така:
(define (loop)
(loop))
Типичен пример за рекурсия е следното изчисление на факториел:
(define (fak n)
(if (= n 0)
1
(* n (fak (- n 1)))))
Коментари
[редактиране | редактиране на кода]Коментарите започват с ; и продължават до края на реда.
Примери
[редактиране | редактиране на кода]Hello world
[редактиране | редактиране на кода] (begin
(display "Hello, World!")
(newline))
Бележки
[редактиране | редактиране на кода]- ↑ classes.soe.ucsc.edu, архив на оригинала от 7 декември 2014, https://web.archive.org/web/20141207143744/http://classes.soe.ucsc.edu/cmps112/Spring03/languages/scheme/SchemeTutorialA.html, посетен на 5 юли 2017