### 3.2. Variablar og funksjonar

No som me veit at alle utsegner i Scheme er omslutta av parentesar og at alle funksjons- og operatornamna kjem først i lista, er me klare for å sjå på korleis me kan laga og bruka variablar og funksjonar. Me byrjar med variablane.

#### 3.2.1. Deklarera variablar

Den vanlegaste måten å deklarera variablar på, er ved hjelp av konstruktøren let*. (I andre språk vil dette vera ekvivalenten til å definera ei liste eller ein tabell med lokale variablar og områda dei kan nyttast i). Som eit eksempel kan me definera to variablar, a og b, og tilordna dei verdiane 1 og 2. Å «tilordna» vil seia å bestemma kva verdi variabelen skal ha. a vert tilordna 1, dvs. vert gjeve verdiinnhaldet 1. («a = 1»). Dette kan me skriva slik:

            (let*
               (
                  (a 1)
                  (b 2)
               )
               (+ a b)
            )

eller på ei linje:

    (let* ( (a 1) (b 2) ) (+ a b) )

| Notat
Når du bruker konsollvindauget, er du nøydd til å skriva alt på ei linje. Elles kan du nytta den metoden du meiner gjev best oversyn over programmet. Meir om dette i under «blankteikn».

Dette deklarerar to lokale variablar, a og b, legg verdiar i variablane, her a = 1 og b = 2, og skriv ut summen av dei: 3.

#### 3.2.2. Kva er ein lokal variabel?

Du la kanskje merke til at me skreiv addisjonen `(+ a b)` innføre parentesane til `let*`-uttrykket, og ikkje etter.

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.

#### 3.2.3. Den generelle `let*`-syntaksen

(Syntaks = skrivemåte) Den vanlege forma for eit `let*`-utsegn er:

            (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.

#### 3.2.4. Blankteikn (kvite mellomrom)

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.

#### 3.2.5. Å tilordna ein nye verdi til ein variabel

Det er ofte behov for å endre innhaldet i ein variabel. Dette kan gjerast med kommandoen `set!`. Eit eksempel:

            (let* ( (theNum 10) ) (set! theNum (+ theNum theNum)) )

Prøv å finna ut kva uttrykket gjer, og skriv det etterpå inn i konsollvindauget.

#### 3.2.6. Funksjonar

Når du no har fått taket på dette med variablar, er det på tide å gå vidare med funksjonar. Alle funksjonar vert definerte etter dette mønsteret:

            (define
               (
                  name
                  param-list
               )
               expressions
            )

der `namn` er namnet på funksjonen, `parameterliste` er ei liste med parameternamn skilde med mellomrom, og `uttrykk` er ein serie med uttrykk som funksjonen utførar når han vert kalla opp. «define» er eit ord som fortel Scheme at no skal det definerast ein funksjon. Eksempel:

    (define (AddXY inX inY) (+ inX inY) )

`AddXY` er funksjonsnamnet og `inX` og `inY` er variablane. Denne funksjonen adderer verdiane som vert lagt i dei to parametrane.

Dersom du er van med andre programmeringsspråk som C/C++, Java, Pascal og liknande, kan det vera du saknar eit par ting i denne definisjonen samanlikna med andre programmeringsspråk.

- Legg merke til at parametrane ikkje er definerte med «type». Dei er altså ikkje definerte som type «type string», «type integer» osv. Scheme er eit typelaust språk. Dette gjer det litt raskare å skriva skripta.

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

3. Ei innføring i Script-Fu |  | 3.3. Lister, lister og atter lister

Report a bug in GIMP Report a documentation error