Common Lisp
![]() | |
Տեսակ | ծրագրավորման լեզու, ծրագրավորման պրոցեդուրային լեզու, օբյեկտ կողմնորոշված ծրագրավորման լեզու, ֆունկցիոնալ ծրագրավորման լեզու և բազմահարացուցային ծրագրավորման լեզու |
---|---|
Առաջացել է | 1984 |
Ստեղծող | X3J13? |
Նախագծող | Սքոթ Ֆալման, Richard P. Gabriel? և David Moon? |
Հիմքի վրա է | Interlisp?[1] և Maclisp?[1] |
Ներշնչվել է | Լիսպ, Lisp Machine Lisp?, Maclisp?, Scheme և Interlisp? |
Կայք | common-lisp.net(անգլ.) |
![]() |
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» է)։
Ծանոթագրություններ
[խմբագրել | խմբագրել կոդը]
|