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