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

от Уикипедия, свободната енциклопедия
(пренасочване от Scheme)
Jump to navigation Jump to search
Scheme
Lambda lc.svg
Парадигма Парадигма на програмиране (functional procedural meta)
Реализиране през 1970 г.;
преди 48 години
 (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))

Локално свързване[редактиране | редактиране на кода]

let[редактиране | редактиране на кода]

let*[редактиране | редактиране на кода]

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.

  • низове

Символните низове започват и завършват с ".

  • символи
  • числа

if“-Конструкции[редактиране | редактиране на кода]

Деструктивни операции[редактиране | редактиране на кода]

Цикли[редактиране | редактиране на кода]

Scheme няма конструкции за цикли. Когато се налага използването им се прибягва до рекурсия. Един безкраен цикъл изглежда така:

 (define (loop)
  (loop))

Типичен пример за рекурсия е следното изчисление на факториел:

 (define (fak n)
    (if (= n 0)
        1
        (* n (fak (- n 1)))))

Коментари[редактиране | редактиране на кода]

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

Примери[редактиране | редактиране на кода]

Hello world[редактиране | редактиране на кода]

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

Бележки[редактиране | редактиране на кода]