Common Lisp

от Уикипедия, свободната енциклопедия
Jump to navigation Jump to search

Common Lisp (Комън Лисп, „Общ Лисп“) е един от езиците за програмиране в семейството Лисп. Спецификацията му, чийто основен автор е Гай Стийл, е създадена в началото на 1980-те години. Стандартизиран е от Американския национален институт за стандарти (ANSI) през 1994 г. като Американски национален стандарт X3.226-1994 (по-късно преименуван на ANSI INCITS 226-1994). Има редица независими реализации на езиковата спецификация (Allegro CL, CLISP, CMUCL, GCL, SBCL и др.), като всяка от тях предлага разширения извън зададеното в стандарта.

Средствата на езика за обектно-ориентирано програмиране, наречени CLOS (Common Lisp Object System), позволяват многократно наследяване (един подклас може да има няколко надкласа). CLOS е функционално-центрична: дефинициите на методи се правят като дефиниции на родови (generic) функции и не са част от дефинициите на класовете. Родовите функции се състоят от мултиметоди: определянето на приложимия метод за дадено обръщение може да става въз основа на динамичните типове на всички аргументи (а не само на първия). CLOS предоставя средства за метаобектно програмиране (много реализации поддържат метаобектния протокол в по-голяма степен от изискваното от стандарта).

Common Lisp разполага с богат набор от числови типове, включително цели числа с неограничен диапазон, рационални числа и комплексни числа, интегрирани в единна числова система. Така резултатите при пресмятания с числа са по-близки до математическите, отколкото при обичайните правила, разпространени сред езиците за програмиране. Например стойността на (/ #C(1 2) #C(3 6)) (частното на двете комплексни числа 1+2i и 3+6i) е точно реалната (рационална) стойност 1/3, както е математически.

История[редактиране | редактиране на кода]

Основна цел при създаването му е да се преодолеят натрупалите се към края на 1970-те години многобройни несъвместимости между разпространените тогава диалекти на Лисп (например Maclisp и Interlisp), като бъде проектиран език за програмиране, подходящ за промишлена употреба.

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

;; дефиниция на функция:
(defun factorial (n)
  "Връща N факториел."  ;реализация с опашна рекурсия
  (declare (type (integer 0) n))
  (labels ((f (n a)
             (if (= n 0)
                 a
               (f (- n 1) (* n a)))))
    (f n 1)))

Източници[редактиране | редактиране на кода]