3. Een handleiding voor Script-Fu

In deze trainingscursus zullen we u laten kennismaken met de basisbeginselen van Scheme, noodzakelijk om Script-Fu te gebruiken, en dan een handig script bouwen dat u kunt toevoegen aan uw gereedschapskist met scripts. Het script vraagt de gebruiker naar enige tekst, en maakt dan een nieuwe afbeelding, perfect uitgelijnd met de tekst. We zullen dan het script verbeteren om het mogelijk te maken een buffer met ruimte rondom de tekst te maken. We zullen besluiten met een paar suggesties voor manieren om uw kennis van Script-Fu te vergroten.

[Opmerking] Opmerking

Dit gedeelte werd aangepast vanuit een handleiding die werd geschreven voor de GIMP 1 Gebruikershandleiding door Mike Terry.

3.1. Bekend raken met Scheme

3.1.1. Beginnen met Scheme

Scheme is een dialect van de familie van de programmeertalen Lisp. GIMP gebruikt TinyScheme, wat een lichtgewicht interpreter is van een subset van de zogenoemde R5RS-standaard.

Het eerste ding om te leren is dat:

Elk argument in Scheme wordt omsloten door haakjes ().

Het tweede ding dat u moet weten is dat:

De functienaam/operator altijd het eerste item tussen de haakjes is en de rest van de items zijn de parameters voor de functie.

Echter, niet alles dat wordt omsloten door haakjes is een functie — het kunnen ook items in een lijst zijn — maar daar komen we later op terug. Naar deze notatie wordt verwezen als naar prefix-notatie, omdat de functie aan alles vooraf gaat. Als u bekend bent met de postfix-notatie, of een calculator hebt die Reverse Polish Notation gebruikt (zoals de meeste calculators van HP), zou u geen problemen moeten hebben met het aanpassen naar het formuleren van uitdrukkingen in Scheme.

Het derde ding om te begrijpen is dat:

Wiskundige operatoren worden ook als functies beschouwd en dus worden zij als eerste vermeld bij het schrijven van wiskundige uitdrukkingen.

Dat volgt logischerwijze uit de prefix-notatie die we eerder vermeldden.

3.1.2. Voorbeelden van prefix-, infix- en postfix-notaties

Hier zijn enkele snelle voorbeelden die de verschillen illustreren tussen de prefix-, infix- en postfix-notaties. We zullen een 1 en 23 bij elkaar optellen:

  • Prefix-notatie: + 1 23 (de manier waarop Scheme het wil)

  • Infix-notatie: 1 + 23 (de manier waarop we het normaal schrijven)

  • Postfix-notatie: 1 23 + (de manier waarop calculators van HP het willen)

3.1.3. Werken in Scheme

In GIMP, selecteer FiltersOntwikkelingScript-FuScript-Fu-opdrachtregel uit het hoofdmenu. Dat zal het venster van de Script-Fu Console openen, dat ons in staat stelt interactief in Scheme te werken.

3.1.4. Het venster Script-Fu Console

Aan de onderzijde van dit venster staat een invoerveld voor tekst voor de opdrachten. Hier kunnen we enkele eenvoudige opdrachten voor Scheme interactief testen. Laten we gemakkelijk beginnen en enkele getallen optellen:

(+ 3 5)

Intypen hiervan en drukken op Enter geeft het verwachte antwoord 8 in het middelste venster.

Afbeelding 13.1. Script-Fu Console gebruiken.

Script-Fu Console gebruiken.

De functie + kan meer argumenten aannemen, dus we kunnen meer dan een getal optellen:

(+ 3 5 6)

Dat geeft ook het verwachte antwoord van 14.

Tot zover gaat het goed — we typen een argument voor Scheme in en het wordt onmiddellijk uitgevoerd in het venster Script-Fu Console. Nu een waarschuwing…

3.1.5. Wees bedacht op extra haakjes

Als u zoals ik bent, bent u er aan gewend om extra haakjes te kunnen gebruiken als u dat wilt — zoals wanneer u een complexe wiskundige vergelijking typt en u wilt de delen daarvan scheiden door haakjes, om het duidelijker te maken als u het leest. In Scheme moet u daar voorzichtig mee zijn en geen onjuiste extra haakjes invoeren. Laten we bijvoorbeeld zeggen dat we 3 willen optellen bij het resultaat van het optellen van 5 en 6:

3 + (5 + 6) + 7 = ?

Wetende dat de operator + een lijst met getallen kan nemen om op te tellen, zou u in de verleiding kunnen komen om bovenstaande te converteren naar het volgende:

(+ 3 (5 6) 7)

Dat is echter niet juist — onthoud, elk argument in Scheme begint en eindigt met een haakje, dus de interpreter van Scheme zal denken dat u probeert een functie aan te roepen die is genaamd 5 in de tweede groep haakjes, in plaats van die getallen bij elkaar op te tellen, voordat ze bij 3 worden opgeteld.

De juiste manier om bovenstaand argument te schrijven, zou zijn:

(+ 3 (+ 5 6) 7)

3.1.6. Zorg er ook voor dat u de juiste afstand hebt

Als u bekend bent met andere programmeertalen, zoals C/C++, Perl of Java, weet u dat u geen ruimte hoeft te hebben rondom wiskundige operatoren om een juiste uitdrukking te vormen:

        3+5, 3 +5, 3+ 5
      

Deze worden allemaal geaccepteerd door compilers voor C/C++, Perl en Java. Hetzelfde geldt echter niet voor Scheme. U moet in Scheme een spatie na een wiskundige operator hebben (of een andere functienaam of operator) om het juiste te hebben geïnterpreteerd door de interpreter van Scheme.

Oefen een beetje met eenvoudige wiskundige bewerkingen in de Script-Fu Console, totdat u zich op uw gemak voelt met deze initiële concepten.