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.

However, not everything enclosed in parentheses is a function — they can also be items in a list — but we'll get to that later. This notation is referred to as prefix notation, because the function prefixes everything else. If you're familiar with postfix notation, or own a calculator that uses Reverse Polish Notation (such as most HP calculators), you should have no problem adapting to formulating expressions 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.

So far, so good — we type in a Scheme statement and it's executed immediately in the Script-Fu Console window. Now for a word of caution…

3.1.5. Wees bedacht op extra haakjes

If you're like me, you're used to being able to use extra parentheses whenever you want to — like when you're typing a complex mathematical equation and you want to separate the parts by parentheses to make it clearer when you read it. In Scheme, you have to be careful and not insert these extra parentheses incorrectly. For example, say we wanted to add 3 to the result of adding 5 and 6 together:

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)

However, this is incorrect — remember, every statement in Scheme starts and ends with parens, so the Scheme interpreter will think that you're trying to call a function named 5 in the second group of parens, rather than summing those numbers before adding them to 3.

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.