3. Ei innføring i Script-Fu

Revisjonshistorie
Revisjon $Revision: 2492 $ 2006-04-10 KoSt

Dette er eit kortkurs i bruk av programmeringsspråket Scheme, som blir 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 vil skriptet bli utvida slik at du kan legge litt luft rundt teksten. Til slutt vil du få noen tips om korleis du kan bruke dei nye kunnskapane dine.

[Notat] Notat

Denne leksjonen er tatt frå brukarhandboka til GIMP 1, skriven av Mike Terry.

3.1. Bli kjent med Scheme

3.1.1. La oss komme i gang

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å, blir kalla “prefiksnotasjon” fordi funksjonen blir 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 bli noe 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

Eksempel på innskriving med dei tre metodane. Eksemplet legg saman tala 1 og 3.

  • Prefix-notasjon: + 1 3 (slik Scheme vil ha det)

  • Infix-notasjon: 1 + 3 (slik vi skriv til vanleg)

  • Postfix-notasjon: 1 3 + (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 UtvidingarScript-FuKonsoll for Script-Fu. Klikk på denne, og vindauget “Script-Fu konsoll” 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 noen tal:

(+ 3 5)

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

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:

3 + (5 + 6) + 7 = ?

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

(+ 3 (5 6) 7)

Dette er feil. Hugs at kvart utsegn i Scheme er inneslutta i parentesar. Omsetjaren 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 rundt matematiske operandar:

            3+5, 3 +5, 3+ 5
          

Alle desse blir 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.