VOOZH about

URL: https://hy.wikipedia.org/wiki/Common_Lisp

⇱ Common Lisp - Վիքիպեդիա


Jump to content
Վիքիպեդիայից՝ ազատ հանրագիտարանից
Common Lisp
👁 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» է)։

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

[խմբագրել | խմբագրել կոդը]
Օգտագործվող
լեզուները

Ադա ALGOL Ասեմբլեր AWK Basic Սի Կոբոլ C++ C# Clarion Clojure ColdFusion D dBase Delphi Eiffel Erlang Euphoria F# Fort Ֆորտրան Go Gambas Groovy HAL/S Haskell Icon Ջավա ՋավաՍկրիպտ Kotlin Limbo Լիսպ Lua Մաթլաբ Modula-3 Object Pascal Objective-C OCaml Oz Parser Պասկալ Perl PHP PowerBASIC Python PL/1 Prolog R Ruby Scala Scheme Smalltalk SQL Standard ML Swift PL/SQL Tcl Vala Visual Basic .NET

Ուսումնական

Agda Clean Curry Լոգո ML REFAL Simula Օբերոն

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

Վիզուալ