Сада када знамо да је сваки 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* израза, а не након њега.
This is because the let*
statement defines an area in your script in which the declared
variables are usable; if you type the (+ a b)
statement after the (let* …) statement,
you'll get an error, because the declared
variables are only valid within the context of the let*
statement; they are what programmers call local variables.
Општи облик let* наредбе је:
(let* ( variables )
expressions )
where variables are declared within parens, e.g.,
(a 2), and
expressions are any valid Scheme expressions. Remember that the
variables declared here are only valid within the
let* statement — they're local variables.
Previously, we mentioned the fact that you'll probably want to use indentation to help clarify and organize your scripts. This is a good policy to adopt, and is not a problem in Scheme — white space is ignored by the Scheme interpreter, and can thus be liberally applied to help clarify and organize the code within a script. However, if you're working in Script-Fu's Console window, you'll have to enter an entire expression on one line; that is, everything between the opening and closing parens of an expression must come on one line in the Script-Fu Console window.
Након што сте иницијализовали променљиву, можда ћете морати да промените њену вредност касније у скрипти. Користите set! наредбу да промените вредност променљиве:
(let* ( (theNum 10) ) (set! theNum (+ theNum theNum)) )
Пробајте да претпоставите шта ће горња наредба урадити, а затим је унесите у прозор Скрипт-фу конзоле.
Сада када сте савладали променљиве, пређимо на рад са функцијама. Функцију дефинишете следећом синтаксом:
(define
(
име
списак-параметара
)
изрази
)
где је име назив додељен овој функцији, списак-параметара је размацима раздвојен списак назива параметара, а изрази је низ израза које функција извршава када се позове. На пример:
(define (AddXY inX inY) (+ inX inY) )
AddXY је име функције, а inX и inY су променљиве. Ова функција узима своја два параметра и сабира их.
Ако сте програмирали у другим императивним језицима (као што су Ц/Ц++, Јава, Паскал итд.), можда ћете приметити да неколико ствари недостаје у овој дефиницији функције у поређењу са другим програмским језицима.
Прво, приметићете да параметри немају никакве „типове“ (односно, нисмо их декларисали као ниске, целе бројеве итд.). Ским (Scheme) је језик без типова. Ово је згодно и омогућава брже писање скрипти.
Second, notice that we don't need to worry about how to „return“ the result of our function — the last statement is the value „returned“ when calling this function. Type the function into the console, then try something like:
(AddXY (AddXY 5 6) 4)