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

Denne bolken er henta frå ei innføring skrive for handboka for GIMP 1 av Mike Terry.

3.1. Bli kjent med Scheme

3.1.1. Byrja med Scheme

Scheme er ein dialekt i Lisp-familen av programmeringsspråk. GIMP brukar TinyScheme, som er ei lettvektsutgåve av den såkalla R5RS-standarden.

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

I GIMP vel du FilterUtviklingScript-FuScript-Fu-konsoll frå hovudmenyen. Dette vil opna konsollvindauget for Script-Fu som let oss arbeida interaktivt i Scheme.

3.1.4. Script-Fu konsoll vindauget

Nedst i dette vindauget finn du eit innskrivingsfelt for kommandoar. Her kan vi prøva ut enkle Scheme-kommandoar interaktivt. Lat oss byrja svært enkelt med å leggja 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. Å bruka Script-Fu-konsollen.

Å bruka Script-Fu-konsollen.

Funksjonen «+» kan ta fleire argument slik at vi kan leggja til fleire tal:

(+ 3 5 6)

Dette gjev også det venta svaret på 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 å skriva uttrykket ovanfor 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.