Scheme (език за програмиране)

Scheme
ПарадигмаПарадигма на програмиране (functional procedural meta)
Реализиране през1970 г.;
преди 54 години
 (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 се осъществяват рекурсии.

(define (fak n)   (letrec ((F (lambda(x)                 (if (= x 0) 1                     (* x (F (- x 1)))))))     (F n))) 

Освен за инициализаиране на глобални променливи и функции, с 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))))) 

Коментарите започват с ; и продължават до края на реда.

  (begin     (display "Hello, World!")     (newline))