| Titelblatt | Lektion 1 | Lektion 2 | Lektion 3 | Lektion 4 | Lektion 5 | Lektion 6 | Referenzen |
|---|---|---|---|---|---|---|---|
| Erster Anlauf | Variable und Funktionen | Immer wieder Listen | Das erste Gerippe | Etwas mehr Fleisch | Noch etwas Salz an die Suppe |
Nun wird es Zeit etwas über Variable und Funktionen zu lernen. Schauen wir, was es noch so an Schaltungen, Hebeln und Knöpfen in der SCHEME-Maschinerie gibt.
Bevor wir weiterrollen, erinnern wir uns noch einmal daran, daß die SCHEME-Anweisung in Klammern eingeschlossen ist und daß Funktionsnamen als Erstes in der Liste der Klammerausdrücke auftauchen. Also los.
Es gibt eine ganze Reihe von unterschiedlichen Methoden, um Variable zu deklarieren. Ich bevorzuge die "let*"-Konstruktion. Sollten Sie mit anderen Programmiersprachen vertraut sein, entspricht diese Konstruktion der Listen-Definition lokaler Variabler innerhalb eines Bereiches, in denen sie gültig sind.
Zeigen wir eine solche Definition an einem Beispiel. Es werden zwei Variable "a" und "b" deklariert und diese der Wert "1" bzw. "2" zugewiesen. Um die Lesbarkeit zu erhöhen, schreibe ich diese Deklaration mit Initialisierung über mehrere Zeilen. Diese Form der "white spaces", der trennenden Zwischenräume, versteht SCHEME. Die Deklaration kann natürlich auch hintereinander in einer Zeile (zum Beispiel im Script-Fu-Console-Fenster) notiert werden.
(let* (
( a 1 )
( b 2 )
)
( + a b )
)
Geben Sie diese Anweisung hintereinander in die Script-Fu-Console ein, gibt der Scheme-Interpreter die Zahl "3" aus. Richtig? Richtig!
Wie Sie sicher richtig bemerkt haben, haben wir eine Summierung "(+ a b)" innerhalb der "let*"-Klammern geschrieben. Diese Notation liegt in der Definition der "let*"-Anweisung begründet. Sie sieht im Wesentlichen so aus:
(let* ( variable ) expressions )
Alle Variablen, die nach "let*" in den Klammern deklariert werden, sind nur innerhalb dieser "let*"-Anweisung gültig. Außerhalb sind sie dem Scheme-Interperter unbekannt. Sie sind lokale Variable.
Weiter oben erwähnte ich, daß zur Erhöhung der Lesbarkeit und der besseren Übersichtlichkeit wegen, der Scheme-Text eingerückt und durch eine gegliederte Zeilenstruktur organisiert werden kann. Das ist zwar nicht in der Script-Fu-Console anwendbar, aber in Scheme-Scripten sollte es zum guten Ton gehören, insbesondere dann wenn man das Scheme-Script veröffentlichen möchte.
Im Allgemeinen macht es wenig Sinn, einer Variablen nur einen Initialisierungswert zuzuweisen. Im Laufe eines Scheme-Scripts möchte man bestimmt einer Variablen einen neuen und anderen Wert zuweisen. Dazu verwenden wir die "set!"-Anweisung.
(let* ( (theNum 10) ) (set! theNum (+ theNum theNum) ) )
Ich gebe maximal drei Versuche, um herauszubekommen, was diese Anweisung bewirkt. Und wenn es einigermaßen klar ist, dann geben Sie diese Anweisung in das Script-Fu-Consolen-Fenster ein. Alles klar? Ich denke doch.
Nachdem wir die Variablen und die Arbeit mit ihnen kurz vorgestellt haben, gehen wir kurz entschlossen zu den Funktionen über.
Die Funktion hat folgenden syntaktischen Aufbau:
(define (name param-list) expressions)
Dabei ist:
| name | der Name der Funktion |
| param-list | die durch Leerzeichen getrennte Liste der Parameter |
| expressions | eine Folge von Scheme-Anweisungen, die der Funktion ihre Funktion verleiht |
Ein Beispiel könnte so aussehen.
(define (AddXY inX inY) (+ inX inY) )
"AddXY" ist der Funktionsname. "inX" und "inY" sind die formalen Parameternamen. Und der nachfolgende Ausdruck beschreibt, daß die beiden Parameterwerte zu addieren sind.
Verstanden ? Oder?
Sollten Sie schon mit anderen imperativen Sprachen wie C/C++, Java, Pascal etc. gearbeitet haben, werden sie eventuell im Vergleich zu diesen Sprachen etwas vermissen. Es gibt keine "Typ"-Angabe für die Variable. In dieser Beziehung ähneln sie mehr Python oder Awk. Scheme ist eine typenlose Sprache und erlaubt somit eine schnelle Eingabe eines Scheme-Scripts.
Zweitens existiert kein "RETURN" mit einer Werte-Rückgabe. In unserem Beispiel liefert die letzte Additions-Anweisung den Rückgabewert. Um dies zu überprüfen, geben Sie einfach die Funktions-Deklaration und danach folgende Zeile ein:
(AddXY (AddXY 5 6) 4)
Überrascht das Ergebnis? Ich glaube kaum. Nachdem wir doch schon einiges wissen.
Punkt. Gehen wir zur Lektion 3 über.
| Titelblatt | Lektion 1 | Lektion 2 | Lektion 3 | Lektion 4 | Lektion 5 | Lektion 6 | Referenzen |
|---|---|---|---|---|---|---|---|
| Erster Anlauf | Variable und Funktionen | Immer wieder Listen | Das erste Gerippe | Etwas mehr Fleisch | Noch etwas Salz an die Suppe |