3. Ei innføring i Script-Fu

Dette er eit kortkurs i bruk av programmeringsspråket Scheme, som vert brukt for å skrive Script-Fu. I løpet av kurset vil du også laga eit nyttig skript som du kan supplere skriptsamlinga di med. Skriptet lar deg skrive inn ein tekst og lagar deretter eit bilete nøyaktig like stort som teksten. Seinare vert skriptet utvida slik at du kan legge litt luft rundt teksten. Til slutt vil du få nokre tips om korleis du kan bruke dei nye kunnskapane dine.

[Notat] Notat

This section was adapted from a tutorial written for the GIMP 1 User Manual by Mike Terry.

3.1. Bli kjent med Scheme

3.1.1. La oss komme i gang

Scheme is a dialect of the Lisp family of programming languages. GIMP uses TinyScheme, which is a lightweight interpreter of a subset of the so-called R5RS standard.

Det første du må lære er at

Alle utsegner i Scheme er omgitt av parentesar ().

Det andre du må lære er at

Funksjonsnamnet eller funksjonsoperatøren er alltid det første elementet i parentesen. Resten av elementa i parentesen er parametrar til funksjonen.

Ikkje alt som står i parentesar er ein funksjon, det kan også vere element i ei liste. Meir om dette seinare. Denne måten å skriva program på, vert kalla «prefiksnotasjon» fordi funksjonen vert sett framføre alt anna. Dersom du er van med «etterskriftsnotasjon» , eller har brukt ein kalkulator med «Reversert polsk notasjon» (som mange større HP-kalkulatorar bruker), burde ikkje dette vert noko stort problem for deg.

Det tredje du må lære deg er at

Matematiske operandar er å sjå på som funksjonar. Difor skal desse skrivast først i eit matematisk uttrykk.

Dette følgjer eigentleg logisk ut frå det som tidlegare er nemnd.

3.1.2. Eksempel på «Prefix-», «Infix-» og «Postfix-» notasjonar

Her er nokre eksempel som viser skilnaden mellom notasjonane «prefiks», «innfiks» og «postfiks». Eksempla legg saman tala 1 og 23.

  • Prefiks-notasjon: + 1 23 (slik Scheme vil ha det)

  • Infiks-notasjon: 1 + 23 (slik vi skriv til vanleg)

  • Postfiks-notasjon: 1 23 + (slik t.d. mange HP-kalkulatorar brukar)

3.1.3. Praktiske øvingar i Scheme

Dermed er vi klare for å praktisera kunnskapane våre. Start opp GIMP, dersom du ikkje alt har gjort det, og finn fram til FilterScript-FuKonsoll. Klikk på denne, og vindauget «Script-Fu konsoll», som vi skal arbeide på, vil dukke opp på skjermen.

3.1.4. Script-Fu konsoll vindauget

Nedst i dette vindauget finn du eit innskrivingsfelt kalla «Aktiv kommando». Her kan vi prøve ut enkle Scheme-kommandoar direkte. La oss byrja svært enkelt med å legge saman nokre tal:

(+ 3 5)

Skriv du inn dette, og trykker Enter -tasten, vil funksjonen dukka opp i det store vindauget saman med svaret 8.

Figur 13.1. Å bruke Script-Fu-konsollen

Å bruke Script-Fu-konsollen

Kva om vi ønskjer å leggja saman fleire enn to tal? Ingen problem. Funksjonen «+» kan ta fleire argument:

(+ 3 5 6)

Fekk du svaret 14?

Fint. — Vi har altså skrive inn ei utsegn i Scheme, og fått svar på dette i Script-Fu vindauget. Nå ei lita åtvaring …

3.1.5. Sjå opp for ekstra parentesar

Mange likar å kunne setje inn ekstra parentesar der det måtte vera ønskeleg, t.d. for å gjere eit komplekst matematisk uttrykk lettare å forstå. I Scheme må du vere nokså nøye med kvar og korleis du brukar slike parentesar. Sett at du ønskjer å addera 3 til resultatet av addisjonen 5 + 6 og deretter legge til 7:

3 + (5 + 6) + 7 = ?

I og med at du nå har lært at operanden + kan addera ei heil liste med tal, vert du kanskje freista til å skriva:

(+ 3 (5 6) 7)

Dette er feil. Hugs at kvart utsegn i Scheme er inneslutta i parentesar. Tolkaren i Scheme reknar med at du prøver å kalla opp ein funksjon med namnet «5» i den andre parentesgruppa. Det du eigentleg meinte, var at programmet først skulle rekne ut den innarste parentesen og deretter addere resultatet til den yttarste parentesen, slik du er van med frå «vanleg» matematikk. Du og Scheme tenkjer altså litt ulikt her.

Den rette måten å skrive dette på i Scheme er

(+ 3 (+ 5 6) 7)

3.1.6. Pass på mellomromma

Dersom du har arbeidd med andre programmeringsspråk som t.d. C/C++, Perl, Delphi eller Java, er du kanskje van med at det ikkje er nødvendig med mellomrom (blankteikn) rundt matematiske operandar:

        3+5, 3 +5, 3+ 5
      

Alle desse vert oppfatta likt og slik du reknar med det skal vera i dei nemnde språka. I Scheme må du derimot ha mellomrom etter desse, og alle andre operandar og funksjonsnamn for den saks skuld.

Eksperimenter litt med det du har lært på denne sida før du går vidare til neste leksjon. Skrivemåtane er svært viktige også i Scheme.