Сада када знамо да је сваки Scheme израз затворен у заграде, и да је назив функције/оператор наведен први, морамо знати како да направимо и користимо променљиве, и како да направимо и користимо функције. Почећемо са променљивама.
Иако постоји неколико различитих метода за декларисање променљивих, пожељан метод је коришћење let* конструкције. Ако сте упознати са другим програмским језицима, ова конструкција је еквивалентна дефинисању листе локалних променљивих и опсега у којем су оне активне. Као пример, да бисте декларисали две променљиве, a и b, иницијализоване на 1 и 2, респективно, написали бисте:
(let*
(
(a 1)
(b 2)
)
(+ a b)
)
или, као један ред:
(let* ( (a 1) (b 2) ) (+ a b) )
|
Примедба |
|---|---|
|
Мораћете све ово да ставите у један ред ако користите конзолни прозор. Уопштено говорећи, међутим, желећете да усвојите сличну праксу увлачења како бисте своје скрипте учинили читљивијим. Причаћемо мало више о овоме у одељку о празнинама. |
Ово декларише две локалне променљиве, a и b, иницијализује их, а затим исписује збир те две променљиве.
Приметићете да смо написали сабирање (+ a b) унутар заграда let* израза, а не након њега.
То је зато што let* наредба дефинише област у вашој скрипти у којој су декларисане променљиве употребљиве; ако укуцате (+ a b) наредбу након (let* …) наредбе, добићете грешку, јер су декларисане променљиве важеће само унутар контекста let* наредбе; оне су оно што програмери зову локалне променљиве.
Општи облик let* наредбе је:
(let* ( variables )
expressions )
где се променљиве декларишу унутар заграда, нпр. (a 2), а изрази су било који важећи Scheme изрази. Запамтите да су променљиве декларисане овде важеће само унутар let* наредбе — оне су локалне променљиве.
Претходно смо поменули чињеницу да ћете вероватно желети да користите увлачење како бисте разјаснили и организовали своје скрипте. Ово је добра политика за усвајање и није проблем у Scheme-у — интерпретатор Scheme-а игнорише празнине, те се оне могу слободно примењивати како би се разјаснио и организовао код унутар скрипте. Међутим, ако радите у прозору Script-Fu конзоле, мораћете да унесете цео израз у један ред; то јест, све између почетне и завршне заграде израза мора бити у једном реду у прозору Script-Fu конзоле.
Након што сте иницијализовали променљиву, можда ћете морати да промените њену вредност касније у скрипти. Користите set! наредбу да промените вредност променљиве:
(let* ( (theNum 10) ) (set! theNum (+ theNum theNum)) )
Пробајте да претпоставите шта ће горња наредба урадити, а затим је унесите у прозор Скрипт-фу конзоле.
Сада када сте савладали променљиве, пређимо на рад са функцијама. Функцију дефинишете следећом синтаксом:
(define
(
име
списак-параметара
)
изрази
)
где је име назив додељен овој функцији, списак-параметара је размацима раздвојен списак назива параметара, а изрази је низ израза које функција извршава када се позове. На пример:
(define (AddXY inX inY) (+ inX inY) )
AddXY је име функције, а inX и inY су променљиве. Ова функција узима своја два параметра и сабира их.
Ако сте програмирали у другим императивним језицима (као што су Ц/Ц++, Јава, Паскал итд.), можда ћете приметити да неколико ствари недостаје у овој дефиницији функције у поређењу са другим програмским језицима.
Прво, приметићете да параметри немају никакве „типове“ (односно, нисмо их декларисали као ниске, целе бројеве итд.). Ским (Scheme) је језик без типова. Ово је згодно и омогућава брже писање скрипти.
Друго, приметићете да не морамо да бринемо о томе како да „вратимо“ резултат наше функције — последњи израз је вредност која се „враћа“ приликом позивања ове функције. Унесите функцију у конзолу, а затим пробајте нешто попут:
(AddXY (AddXY 5 6) 4)