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 |
---|---|
This section was adapted from a tutorial written for the GIMP 1 User Manual by Mike Terry. |
Scheme is a dialect of the Lisp family of programming languages. GIMP uses TinyScheme, which is a lightweight interpreter of a subset of the so-called R5RS standard.
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.
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.
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.
Hier sind ein paar kurze 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)
In GIMP, select
→ → → from the main menu. This will start up the Script-Fu Console window, which allows us to work interactively in Scheme.At the bottom of this window is a text entry field for commands. Here, we can test out simple Scheme commands interactively. Let's start out easy, and add some numbers:
(+ 3 5)
Wenn Sie das eingeben und dann Enter drücken, erhalten Sie die erwartete Antwort von 8 im Hauptfenster.
The „+“ function can take more arguments, so we can add more than one number:
(+ 3 5 6)
Dies ergibt ebenfalls die erwartete Antwort von 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…
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 = ?
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)
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.
Der korrekte Weg, die obige Anweisung zu schreiben, wäre:
(+ 3 (+ 5 6) 7)
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 akzeptiert. 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.