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

Dette er fordi utrykket `let*` definerer området i skriptet der desse variablane er gyldige, altså der dei kan brukast. Prøver du å skriva uttrykket `(+ a b)` etter uttrykket `(let* )`, vil du få ei feilmelding. Dei deklarerte variablane er berre gyldige innføre det uttrykket dei er definerte inni. Dei er det programmerarane kallar lokale variablar.

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

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

            (let* ( variables )
              expressions )

der variablane er deklarerte innføre parentesar, t.d. `(let* )`, og uttrykka er eit gyldig uttrykk i Scheme. Hugs at variablane som vert definerte her er lokale variablar, og såleis ikkje gyldige utføre `let*`-uttrykket.

#### 3.2.4. Blankteikn (kvite mellomrom)

Tidlegare har me nemnd at det er mogleg å bruka mellomrom og innrykk for å gjera programmet tydelegare, dvs. lettare å lesa. Dette er ein god vane å ta med seg, og er ikkje noko problem i Scheme. Du kan altså setja inn blankteikn så mykje du ønskjer. (Blankteikn er heilt alminnelege mellomrom som ikkje trengst i programmet, men vert sett inn for å gjera det enklare for oss å lesa kva som står på skjermen). Dersom du arbeidar i konsollvindauget for Script-Fu må du skriva inn heile uttrykket i ei linje. Alt mellom opnings- og lukkingsparentesen må vera på ei linje.

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

- Du treng heller ikkje bekymra deg om korleis funksjonen skal returnere resultatet. Funksjonen sender tilbake verdien av det siste uttrykket. Skriv funksjonen ovanfor inn på konsollen og prøv ut dette, eller noko liknande:

      (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