Scheme

Վիքիպեդիայից՝ ազատ հանրագիտարանից
Scheme
Lambda lc.svg
Տեսակ ծրագրավորման լեզու
Սեմանտիկա ֆունկցիոնալ
Կատարման ձև ինտերպրետացիա և կոմպիլյացիա
Առաջացել է 1975 թ․
Ստեղծող Գ․ Սթիլ, Ջ․ Սասմեն
Տիպիզացիա դինամիկ
Ընթացիկ տարբերակ R7RS
Ներշնչվել է LISP
Ներշնչել է Common Lisp, Racket
Կայք http://www.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)))