| 👁 Image | |
| Տեսակ | ծրագրավորման լեզու, ծրագրավորման պրոցեդուրային լեզու, օբյեկտ կողմնորոշված ծրագրավորման լեզու, ֆունկցիոնալ ծրագրավորման լեզու և բազմահարացուցային ծրագրավորման լեզու |
|---|---|
| Առաջացել է | 1984 |
| Ստեղծող | X3J13? |
| Նախագծող | Սքոթ Ֆալման, Richard P. Gabriel? և David Moon? |
| Հիմքի վրա է | Interlisp?[1] և Maclisp?[1] |
| Ներշնչվել է | Լիսպ, Lisp Machine Lisp?, Maclisp?, Scheme և Interlisp? |
| Կայք | common-lisp.net(անգլ.) |
| 👁 Image Common Lisp Վիքիպահեստում | |
Common Lisp (CL), բազմանպատակ ծրագրավորման լեզու, որը հնարավորություն է տալիս ծրագրավորել պրոցեդուրային, ֆունկցիոնալ և օբյեկտներին կողմնորոշված մոտեցումներով։ Մշակվել և ստանդարտացվել է ANSI X3J13 կոմիտեի կողմից։ Common Lisp-ը տիպերի դինամիկ ստուգմամբ խիստ տիպիզացված լեզու է։
Ֆունկցիաներ
[խմբագրել | խմբագրել կոդը]Հանդիսանալով Lisp ծրագրավորման լեզվի դիալեկտ՝ Common Lisp լեզվում նույնպես ծրագրերի ու տվյալների ներկայացման համար օգտագործում են S-արտահայտությունները (S-expressions)։ Ֆունկցիաների, մակրոսների ու հատուկ կառուցվածքների կիրառությունները ներկայացվում են որպես «» և «» փակագծերի մեջ առնված ցուցակներ։ Օրինակ, շառավղով շրջանի մակերեսը հաշվող ֆուկցիայի սահմանումն ունի հետևյալ տեսքը․
(defunarea(r) (*pirr))
որտեղ -ը նոր գլոբալ ֆունկցիա սահմանող մակրոսն է, իսկ «»-ը՝ բազմապատկման ֆունկցիան։
Անանուն ֆունկցիաներ
[խմբագրել | խմբագրել կոդը]Անանուն ֆունկցիաները ստեղծվում են մակրոսով։ բառին հետևում են ֆունկցիայի արգումենտների ցուցակը և մարմինը ձևավորող արտահայտությունները։ Օրինակ, a և b կողերով ուղղանկյուն եռանկյան ներքնաձիգը հաշվող ֆունկցիան կարելի է սահմանել հետևյալ կերպ․
(lambda(ab)(sqrt(*aa)(*bb)))
Լոկալ ֆունկցիաներ
[խմբագրել | խմբագրել կոդը]Ֆունկցիայի մարմնում լոկալ ֆունկցիան սահմանվում է 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((v01) (v1"abc") (v2'(xy)) v3) #| ... |# )
let կառուցվածքը և let* կառուցվածքից տարբերվում է նրանով, որ առաջինում փոփոխականներն արժեքներ վերագրումը կատարվում է զուգահեռաբար՝ միմյանցից անկախ, իրկ երկրորդ դեպքում՝ հաջորդաբար։ let* կառուցվածքի ամեն մի փոփոխականը կարող է օգտագործել իր նախորդի արժեքը։ Օրինակ,
(let*((v02) (v1(*v03)) (v2(+v1777)) #| ... |# )
Մակրոսներ
[խմբագրել | խմբագրել կոդը]Common Lisp լեզվի մակրոսների մեխանիզմը լեզվի ընդլայնման հիմնական եղանակն է։ Այն հնարավորություն է տալիս լեզուն հարստացնել նոր գործողություններով։ Մակրոսները սահմանվում են defmacro մակրոսով։
Ստրուկտուրաներ
[խմբագրել | խմբագրել կոդը]Ստրուկտուրաները սահմանվում են մակրոսով։ Այդ մակրոսի առաջին արգումենտը ստրուկտուրայի անունն է, իսկ հաջորդները՝ դաշտերը (slots)։ Ստրուկտուրայի ամեն մի դաշտի համար կարելի է տալ լռելության արժեք, տիպ և նշել, որ տվյալ դաշտն առաջին անգամ արժեքավորվելուց հետո չի կարող փոխել արժեքը («read only» է)։
Ծանոթագրություններ
[խմբագրել | խմբագրել կոդը]
| ||||||||||||||
