Scheme՝ ֆունկցիոնալ ծրագրավորման լեզու է։ Ծրագրավորման LISP լեզուների ընտանիքի ամենահայտնի ներկայացուցիչներից մեկը։ Ստեղծվել է Մասաչուսեթսի տեխնոլոգիական ինստիտուտում Գ․ Սթիլի (G․ L. Steele) և Ջ․ Սասմենի (G․ Sussman) կողմից, 1970-ականների կեսերին։

Scheme
Lambda lc.svg
Տեսակծրագրավորման լեզու, բազմահարացուցային ծրագրավորման լեզու, ֆունկցիոնալ ծրագրավորման լեզու, ծրագրավորման պրոցեդուրային լեզու, metaprogramming language? և off-side rule language?
Սեմանտիկաֆունկցիոնալ
Կատարման ձևինտերպրետացիա և կոմպիլյացիա
Առաջացել է1975 թ․
ՍտեղծողԳ․ Սթիլ, Ջ․ Սասմեն
ՆախագծողGuy L. Steele? և Gerald Jay Sussman?
Ընդլայնումներ.scm և .ss
Տիպիզացիադինամիկ
Ներշնչվել էLISP
Ներշնչել էCommon Lisp, Racket
Կայքscheme-reports.org(անգլ.)
Scheme (programming language) Վիքիպահեստում

ՇարահյուսությունըԽմբագրել

Scheme լեզուն ստեղծելիս հեղինակները հիմնական շեշտադրումը կատարել են լեզվի պարզության և մինիմալիստության վրա։ Լեզուն իր շարահյուսությունն ուղղակիորեն ժառանգել է դասական LISP լեզվից։ Ծրագրերը և տվյալները ներկայացվում են S-արտահայտություններով (S-expression)՝ կլոր փակագծերի մեջ վերցրած ցուցակներով, որոնց առաջին տարրը գործողությունն է (oeprator), իսկ հաջորդները, եթե այդպիսիք առկա են, գործողության արգումենտները։ Օրինակ, հետևյալ արտահայտության մեջ, equal?-ը օբյեկտների հավասարությունը ստուգող գործողությունն է, իսկ 3.14 և pi սիմվոլները՝ նրա արգումենտները․

(equal? 3.14 pi)

Ֆունկցիայի սահմանումըԽմբագրել

Scheme լեզվում ֆունկցիան կարելի է փոխանցել որպես մեկ այլ ֆունկցիայի արգումենտ կամ ֆունկցիան կարելի է վերադարձնել որպես հաշվարկման արժեք (այս դեպքում ընդունված է ասել, որ ֆունկցիան առաջին դասի օբյեկտ է)։ Ֆունկցիաները սահմանվում են define օպերատորով։ Սրա առաջին արգումենտը մի ցուցակ է, որը պարունակում է սահմանվող ֆունկցիայի անունն ու պարամետրերը, իսկ հաջորդ արգումենտնրը կազմում են ֆունկցիայի մարմինը։ Օրինակ, հայտնի «Hello, world!» ծրագիրը Scheme լեզվով կունենա այսպիսի տեսք․

(define (hello)
    (display "Hello, world!")
    (newline))

Անանուն ֆունկցիաԽմբագրել

Անանուն ֆունկցիաները սահմանվում են lambda օպերատորով։ lambda-ի առաջին արգումենտը ֆունկցիայի պարամետրերի ցուցակն է, իսկ հաջորդները՝ ֆունկցիայի մարմինը կազմող արտահայտությունները։ Օրինակ, ֆունկցիան, որը ողջունում է տրված անունով մարդուն, սահմանվում է հետևյալ կերպ․

(lambda (name)
    (display "Hello, ")
    (display name)
    (newline))

Քանի որ ֆունկցիան առաջին դասի օբյեկտ է, lambda֊ի միջոցով սահմանված անանուն ֆունկցիան կարելի է define օպերատորով կապել որևէ սիմվոլի և ստանալ անվանված ֆունկցիա։ Այսպես․

(define hello-you
    (lambda (name)
        (display "Hello, ")
        (display name)
        (newline)))