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

от Уикипедия, свободната енциклопедия
Направо към: навигация, търсене

Scheme е функционален език за програмиране, диалект на LISP, разработен в технологичния институт в Масачузетс. Характерен е със своя минималистичен синтаксис. Подходящ е за първоначално запознаване с функционалното програмиране.


Глобални декларации[редактиране | edit source]

С ключовата дума define се създава променлива и се инициализира с дадена стойност.

 (define a 7)

Възможна е и декларация на функция. В следния пример e декларирана функция square за повдигане дадено число на квадрат:

 (define (square x)
    (* x x))

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

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

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

letrec[редактиране | edit source]

С letrec се осъществяват рекурсии.

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

define[редактиране | edit source]

Освен за инициализаиране на глобални променливи и функции, с define могат да се дефинират и локани променливи, видими в блока, в който се намират. Така се постига по добра четливост на програмата и така се избягва използването на letrec.

  (let ((x 5))
 
    (define (foo y)
      (bar x y))
 
    (define (bar a b)
      (+ (* a b) a))
 
    (foo (+ x 3)))

Типове данни[редактиране | edit source]

Процедури[редактиране | edit source]

Списъци[редактиране | edit source]

  • list

Функцията list връща нов списък от аргументите си.

 (list 1 2 3)
 (list (list 1 2) (list 3 4))
  • sublist
  • list-ref

Функцията list-ref приема като аргументи списък и позиция в списъка. Връща елемента от списъка, който се намира на посочената позиция.

 (list-ref (list 'а 'б 'в 'г) 1) ; връща 'б
  • list-tail
  • lenght

Функцията length взима като аргумент списък и връща неговата дължина.

 (length (list 0 1 2 3 4)) ; дължината на списъка е 5
  • cons
  • car
  • cdr
  • append
  • reverse

Други[редактиране | edit source]

  • булев тип

Истина и неистина се отбелязват съответно с #t и #f.

  • низове

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

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

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

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

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

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

 (define (loop)
  (loop))

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

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

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

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

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

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

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