Common Lisp je v informatice rozšíření funkcionálního programovacího jazyka Lisp, který je zveřejněn v ANSI (American National Standards Institute). Common Lisp byl vyvinut kvůli sjednocení odlišných variant Lispu. Jedná se o jazyk, který využívá procedurální, funkcionální a objektově-orientované programovací paradigmata. Obsahuje sadu nástrojů pro objektově orientované programování. Další rozšiřující dialekty jsou s Common Lisp kompatibilní (cmlisp, elisp, autolisp atd.).

Proměnné

K nastavení proměnných slouží příkaz setq.

(setq a 1)

nastaví vazbu symbolu a na hodnotu 1. Lokální proměnné se nastavují příkazem let.

(let ((b 8)) b)

vytvoří lokální prostředí a v něm nastaví vazbu symbolu b na 8. Poté vrátí hodnotu symbolu b. (Což je v daném prostředí 8.)

Typy

Podrobnější informace naleznete v článku Datový typ.

Common Lisp obsahuje mnoho datových typů, které jsou vzájemně uspořádány do stromové struktury.

Ke každému netriviálnímu datovému typu existuje většinou stejnojmenná funkce pro vytvoření prvku daného typu, nebo lze daný prvek (např. číslo) rovnou zapsat v podobě čitelné readerem.

Numerické typy

Existují další numerické typy jako bit či unsigned-byte a lehce lze vytvářet v případě potřeby (např. pro omezení obsahu slotů tříd) další pomocí konstrukcí (<numetický_datový_typ> [horní_limit [dolní_limit]])

Jiné typy

Cesty představují soubory a adresáře v souborovém systému.

Vstupní a výstupní toky představují zdroj binárních a textových dat.

PRNG je pseudo-generátor náhodných čísel, který je vestavěn v Common Lisp. Náhodný objekt představuje jedno použití zdroje generátoru náhodných čísel.

Podmínky představují chyby, výjimky a jiné události na které program reaguje.

Datové struktury

Seznamy jsou u téměř všech ostatních dialektů Lispu ve složení conses. Tato datová struktura obsahuje dva sloty car, cdr (podle "contents of address register" a "contents of decrement register").

(cons 3 1) ; vytvoří cons a nastaví car na 3 a cdr na 1

Pole je číselný typ. Vytváří se pomocí funkce make-array. Pomocí funkce aref se do něho přistupuje. Je zde i podpora vícerozměrných polí, které lze využít pro matice při matematických operacích. Velikost pole lze dynamicky měnit v případě potřeby. Jednorozměrné pole je vektor. Jednotlivé prvky pole mohou být jakékoliv typu (i smíšené typy v jednom poli). Dva typy polí dle obsahu:

Příklady vytvoření pole:

(make-array 4) ; jednorozměrné pole (4 prvky)
(make-array '(2 2)) ; dvourozměrné pole (2x2)

Hash tabulky ukládají data spolu s jejich asociacemi. Každý objekt v hash tabulce má svůj klíč (key) a k němu příslušnou hodnotu (value).

Balíčky jsou symboly, které se užívají k oddělení jednotlivých částí programu. Samotný balíček může exportovat některé symboly jako součást rozhraní. Balíček může sám užívat i jiné balíčky.

Struktury představují libovolné komplexní datové struktury s libovolným počtem a typem polí (nazývají se sloty). Struktury umožňují jednoduchou dědičnost.

Třídy jsou podobné jako struktury. Nabízejí více dynamických vlastností a vícenásobnou dědičnost. Třídy byly do Common Lisp přidány až později. Objekty vytvořené třídy se nazývají instance.

Funkce

Definice funkcí

Common Lisp podporuje funkce první třídy. Definice funkcí pomocí makra defun. V definici je uveden název funkce, všechny argumenty funkce a tělo funkce.

(defun název_funkce (argumenty) tělo_funkce)

Místní funkce mohou být definovány pomocí příkazů flet a labels.

(flet název_funkce (argumenty) tělo_funkce)

Definice generické funkce a metody

Metody se definují pomocí makra defmethod.

(defmethod název metody (tělo metody))

Generické funkce jsou kolekcí metod. Tyto funkce se definují pomocí makra defgeneric.

(defgeneric název funkce (tělo funkce))

Externí odkazy