Scheme

Վիքիպեդիայից՝ ազատ հանրագիտարանից
Scheme
Изображение логотипа
Տեսակծրագրավորման լեզու, բազմահարացուցային ծրագրավորման լեզու, ֆունկցիոնալ ծրագրավորման լեզու, ծրագրավորման պրոցեդուրային լեզու և metaprogramming language?
Սեմանտիկաֆունկցիոնալ
Կատարման ձևինտերպրետացիա և կոմպիլյացիա
Առաջացել է1975 թ․
ՍտեղծողԳ․ Սթիլ, Ջ․ Սասմեն
ՆախագծողGuy L. Steele? և Ջերալդ Ջեյ Սուսման
Ընդլայնումներ.scm և .ss
Տիպիզացիադինամիկ
Ներշնչվել էLISP
Ներշնչել էCommon Lisp, Racket
Կայքscheme-reports.org(անգլ.)
 Scheme (programming language) Վիքիպահեստում

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

Շարահյուսություն[խմբագրել | խմբագրել կոդը]

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)))