3. Ein Skript-Fu-Tutorial

In diesem Übungskurs wollen wir Sie in die Grundlagen von Scheme einführen, soweit sie für Skript-Fu notwendig sind, und dann ein nützliches Skript bauen, das Sie dann Ihrer Skriptsammlung hinzufügen können. Das Skript wird den Benutzer auffordern, einen Text einzugeben, und dann ein neues Bild genau in der passenden Größe zum Text erstellen. Wir werden danach das Skript ausbauen, so dass der Benutzer die Möglichkeit erhält, einen Puffer um den Text zu erstellen. Wir schließen dann mit ein paar Vorschlägen, wie Sie Ihr Wissen über Skript-Fu erweitern können.

[Anmerkung] Anmerkung

Dieses Kapitel wurde aus einem Tutorial von Mike Terry für das GIMP1-Handbuch übernommen und angepasst.

3.1. Der erste Kontakt mit Scheme

3.1.1. Anfangen mit Scheme

Das erste, was Sie lernen müssen, ist:

Jede Anweisung in Scheme wird von runden Klammern () umgeben.

Als zweites müssen Sie wissen:

Der Funktionsname/-operator ist immer das erste Element innerhalb der Klammern, die anderen Elemente sind Parameter der Funktion.

Allerdings ist nicht alles in runden Klammern eine Funktion – es können auch Elemente in einer Liste sein –, aber dazu kommen wir später. Diese Art der Notation wird übrigens Präfixnotation genannt, da die Funktion vor (lat. prae) allem anderen steht. Wenn Sie mit der Postfixnotation vertraut sind oder einen Taschenrechner besitzen, der die umgekehrte polnische Notation verwendet, sollten Sie keine Probleme haben, sich an die Formulierung von Scheme-Ausdrücken anzupassen.

Das dritte, was Sie verstehen müssen, ist:

Mathematische Operatoren werden ebenfalls als Funktionen betrachtet und daher genauso am Anfang eines mathematischen Ausdrucks aufgeführt.

Das folgt ganz logisch aus der eben erwähnten Erklärung zur Präfixnotation.

3.1.2. Beispiele für Präfix-, Infix- und Postfixnotation

Hier sind ein paar kuze Beispiele, die die Unterschiede zwischen Präfix-, Infix- und Postfix-Notation illustrieren. Dazu addieren wir 1 und 23:

  • Präfixnotation: + 1 23 (so will es Scheme haben)

  • Infixnotation: 1 + 23 (so schreiben wir es normalerweise)

  • Postfixnotation: 1 23 + (so wollen es manche HP-Taschenrechner)

3.1.3. Mit Scheme üben

Lassen Sie uns nun das üben, was wir gerade gelernt haben. Starten Sie GIMP, falls Sie es noch nicht getan haben, und wählen Sie FilterSkript-FuKonsole. Es öffnet sich das Fenster der Skript-Fu-Konsole, wo Sie interaktiv mit Scheme arbeiten können:

3.1.4. Die Skript-Fu-Konsole

Unten im Fenster ist ein Eingabenfeld. Hier können wir interaktiv einfache Scheme-Anweisungen ausprobieren. Fangen wir mit etwas ganz Einfachem an und addieren einige Zahlen:

(+ 3 5)

Wenn Sie das eingeben und dann Enter drücken, erhalten Sie die erwartete Antwort von 8 im Hauptfenster.

Abbildung 12.3. Die Skript-Fu-Konsole benutzen

Die Skript-Fu-Konsole benutzen

Was aber, wenn wir mehr als zwei Zahlen addieren wollen? Die +-Funktion akzeptiert auch mehr als zwei Argumente, das ist also kein Problem:

(+ 3 5 6)

Dies ergibt ebenfalls die erwartete Antwort von 14.

So weit, so gut – wir geben eine Scheme-Anweisung ein, und sie wird unverzüglich in der Skript-Fu-Konsole ausgeführt. Aber Vorsicht…

3.1.5. Vorsicht bei zusätzlichen Klammern

Wenn es Ihnen wie mir geht, sind Sie es gewohnt, überall zusätzliche Klammern einfügen zu dürfen – z.B. wenn Sie eine komplexe mathematische Formel schreiben und der Übersichtlichkeit wegen die einzelnen Teile durch Klammern voneinander trennen wollen. In Scheme müssen Sie aufpassen, dass Sie diese zusätzlichen Klammern nicht in fehlerhafter Weise einfügen. Sagen wir mal als Beispiel, wir wollen die folgende Addition durchführen:

3 + (5 + 6) + 7 = ?

Mit dem Wissen, dass der +-Operator mehr als zwei Zahlen addieren kann, könnten Sie versucht sein, den obigen Ausdruck folgendermaßen umzuformen:

(+ 3 (5 6) 7)

Allerdings ist dies nicht korrekt. Erinnern Sie sich, jede Anweisung in Scheme beginnt und endet mit einer Klammer, der Scheme-Interpreter wird annehmen, dass Sie in der zweiten Klammerngruppe eine Funktion namens 5 aufzurufen versuchen, anstatt zuerst die Summe dieser Zahlen zu bilden und sie dann zu 3 zu addieren.

Der korrekte Weg, die obige Anweisung zu schreiben, wäre:

(+ 3 (+ 5 6) 7)

3.1.6. Achten Sie auch auf korrekte Leerzeichen

Wenn Sie mit anderen Programmiersprachen vertraut sind, wie C/C++, Perl oder Java, dann wissen Sie, dass vor und hinter mathematischen Operatoren keine Leerzeichen stehen müssen, damit der Ausdruck eine korrekte Form hat.

        3+5, 3 +5, 3+ 5
      

Diese Ausdrücke werden alle von C/C++-, Perl- und Java-Compilern akzepiert. Auf Scheme trifft das allerdings nicht zu. Sie müssen in Scheme nach einem mathematischen Operator (oder irgendeinem anderen Funktionsnamen oder Operator) ein Leerzeichen lassen, damit er vom Scheme-Interpreter korrekt interpretiert wird.

Üben Sie ein wenig mit einfachen mathematischen Gleichungen in der Skript-Fu-Konsole, bis Sie mit diesen grundlegenden Konzepten vollkommen vertraut sind.