Scheme

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