**Common Lisp** (**CL**), բազմանպատակ ծրագրավորման լեզու, որը հնարավորություն է տալիս ծրագրավորել *պրոցեդուրային*, *ֆունկցիոնալ* և *օբյեկտներին կողմնորոշված* մոտեցումներով։ Մշակվել և ստանդարտացվել է ANSI X3J13 կոմիտեի կողմից։ Common Lisp-ը տիպերի դինամիկ ստուգմամբ խիստ տիպիզացված լեզու է։

Ֆունկցիաներ
-----------

Հանդիսանալով Lisp ծրագրավորման լեզվի դիալեկտ՝ Common Lisp լեզվում նույնպես ծրագրերի ու տվյալների ներկայացման համար օգտագործում են S-արտահայտությունները (S-expressions)։ Ֆունկցիաների, մակրոսների ու հատուկ կառուցվածքների կիրառությունները ներկայացվում են որպես «(» և «)» փակագծերի մեջ առնված ցուցակներ։ Օրինակ, r շառավղով շրջանի մակերեսը հաշվող ֆուկցիայի սահմանումն ունի հետևյալ տեսքը․

```
(defun area (r)
 (\* pi r r))

```

որտեղ defun-ը նոր գլոբալ ֆունկցիա սահմանող մակրոսն է, իսկ «\*»-ը՝ բազմապատկման ֆունկցիան։

### Անանուն ֆունկցիաներ

Անանուն ֆունկցիաները ստեղծվում են lambda մակրոսով։ lambda բառին հետևում են ֆունկցիայի արգումենտների ցուցակը և մարմինը ձևավորող արտահայտությունները։ Օրինակ, *a* և *b* կողերով ուղղանկյուն եռանկյան ներքնաձիգը հաշվող ֆունկցիան կարելի է սահմանել հետևյալ կերպ․

```
(lambda (a b) (sqrt (\* a a) (\* b b)))

```

### Լոկալ ֆունկցիաներ

Ֆունկցիայի մարմնում լոկալ ֆունկցիան սահմանվում է `labels` և `flet` կառուցվածքներով։ `labels`-ի օգնությամբ սահմանված ֆունկցիաները տեսանելի են միմյանց համար և կարող են պարունակել ռեկուրսիա կամ փոխադարձ ռեկուրսիա։ `flet` կառուցվածքի օգնությամբ սահմանված լոկալ ֆունկցիաները իրարից անկախ են։

Հաստատուններ և փոփոխականներ
---------------------------

Դինամիկ փոփոխականները սահամնվում են `defvar` և `defparameter` մակրոսներով, իսկ հաստատունները՝ `defconstant` մակրոսով։ Օրինակ, ստորև սահմանված են `*first-variable*`, `*second-variable*` դինամիկ փոփոխականները և `+one-constant+` հաստատունը․

```
(defvar \*first-variable\* nil)
(defparameter \*second-variable\* 777)
(defconstant +one-constant+ "String literal")

```

ըստ ընդունված պայմանավորվածության Common Lisp ծրագրերում հայտարարված դինամիկ փոփոխականների անունները սկսվում և ավարտվում են «\*» նիշով, իսկ հաստատունների անունները՝ «+» նիշով։

### Լոկալ փոփոխականներ

Լոկալ (լեքսիկական) փոփոխականները ստեղծվում են `let` և `let*` կառուցվածքների մարմնում։ Օրինակ, հետևյալ արտահայտության մեջ ստեղծված են `v0`, `v1`, `v2` և `v3` լոկալ փոփոխականները, որոնցից առաջին երեքին արժեք է տրված, իսկ չորրորդին՝ ոչ (վերինն ընդունում է `nil` արժեքը)։

```
(let ((v0 1) 
 (v1 "abc")
 (v2 '(x y))
 v3)
#| ... |#
)

```

`let` կառուցվածքը և `let*` կառուցվածքից տարբերվում է նրանով, որ առաջինում փոփոխականներն արժեքներ վերագրումը կատարվում է զուգահեռաբար՝ միմյանցից անկախ, իրկ երկրորդ դեպքում՝ հաջորդաբար։ `let*` կառուցվածքի ամեն մի փոփոխականը կարող է օգտագործել իր նախորդի արժեքը։ Օրինակ,

```
(let\* ((v0 2) 
 (v1 (\* v0 3))
 (v2 (+ v1 777))
#| ... |#
)

```

Մակրոսներ
---------

Common Lisp լեզվի մակրոսների մեխանիզմը լեզվի ընդլայնման հիմնական եղանակն է։ Այն հնարավորություն է տալիս լեզուն հարստացնել նոր գործողություններով։ Մակրոսները սահմանվում են `defmacro` մակրոսով։

Ստրուկտուրաներ
--------------

Ստրուկտուրաները սահմանվում են defstruct մակրոսով։ Այդ մակրոսի առաջին արգումենտը ստրուկտուրայի անունն է, իսկ հաջորդները՝ դաշտերը (slots)։ Ստրուկտուրայի ամեն մի դաշտի համար կարելի է տալ լռելության արժեք, տիպ և նշել, որ տվյալ դաշտն առաջին անգամ արժեքավորվելուց հետո չի կարող փոխել արժեքը («read only» է)։

Ծանոթագրություններ
------------------

1. 1 2


|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * դ
* ք
* խ
Հիմնական ծրագրավորման լեզուները (համեմատումը  • IDE  • պատմությունը  • ժամանակագրութունը) |
| --- |
|  |
| Օգտագործվողլեզուները | 
Ada •
APL •
Ասեմբլեր •
ActionScript •
ABAP/4 •
AutoIt •
AWK •
Basic •
C •
Կոբոլ •
C++ •
C# •
Cω •
Clarion •
Clojure •
ColdFusion •
Common Lisp •
D •
dBase •
Delphi •
Eiffel •
Erlang •
Euphoria •
F# •
Fort •
Fortran •
Gambas •
Go •
Groovy •
HAL/S •
Haskell •
Icon •
Ջավա •
ՋավաՍկրիպտ •
Limbo •
Lua •
Mudula-3 •
Object Pascal •
Objective-C •
OCaml •
Oz •
Parser •
Pascal •
Perl •
PHP •
PowerBASIC •
Python •
PL/1 •
Prolog •
R •
Ruby •
Scala •
Scheme •
Smalltalk •
SQL •
Standard ML •
PL/SQL •
Tcl •
Vala •
Visual Basic
(.NET)
 |
|  |
| Ուսումնական | 
Agda •
Clean •
Curry •
Logo •
ML •
REFAL •
Simula •
Oberon
 |
|  |
| IEC 61131-3 | 
Instruction List •
ST •
FBD •
Ladder Diagram (LD) •
SFC
 |
|  |
| Այլ | 
Modula-2 •
Miranda •
Hope •
Rexx
 |
|  |
| Էզոտերիկ | 
HQ9+/HQ9++ •
INTERCAL •
Brainfuck •
Brainfork •
Befunge •
Malbolge •
Piet •
Spoon •
Unlambda •
Whitespace •
FALSE •
LOLCODE
 |
|  |
| Վիզուալ | 
G
(LabVIEW) •
Microsoft VPL •
Sikuli •
VisSim •
Scratch
 |

 |