| Infos Home | Impressum | Original Artikel & Autoren Liste |
Entwickelt wurde Scheme am Massachusetts Institute of Technology, wo auch die formale Spezifikation zur Verfügung steht, der so genannte Revised Report.
| Inhalt |
|
1 Sprachelemente
1.1 Kommentare
2 Beispiele1.2 Notation 1.3 Variablen 1.4 Prozeduren 1.5 Listen 1.6 Datentypen 1.7 Bedingungen 1.8 Schleifen 3 4 |
Sprachelemente
Kommentare
Kommentare werden durch ein Semikolon (;) eingeleitet.
Beispiel: Eine Prozedur mit zwei Argumenten
Man unterscheidet zwei Arten von Prozeduren: Diejenigen, die durch den Programmierer erstellt werden, und jene, die bereits vordefiniert sind (set!, car, cdr, +, -, *, /). Diese vordefinierten Prozeduren können neu definiert werden, wie folgendes Beispiel zeigt:
Beispiel:
(cons 1 (cons 2 (cons 3 (cons 4 '()))))
Beispiel:
(cdr '(1 2 3 4)) ;ergibt als Ausgabe: (2 3 4)
If wertet einen Befehl oder einen Wert aus, und führt je nach Ergebnis (#t oder #f) eine entsprechende Anweisung aus.
Mit Cond ist es möglich mehrere Fälle abzufangen. Trifft keiner dieser Fälle ein, so wird eine else-Behandlung für alle sonstigen Möglichkeiten eingeleitet.
Hallo Welt, Türme von Hanoi, ...
Notation
Scheme verwendet die Präfixnotation. Beispielsweise schreibt man nicht (10 - 8) sondern
(- 10 8).Variablen
Variablen werden durch define, let und einigen anderen Anweisungen definiert, wobei durch eine Definition mit define globale Variablen entstehen (define darf nicht in Prozeduren verwendet werden).(define var wert)
Variablen, die durch let definiert werden, sind nur innerhalb dieses Befehls gültig.(let ([var1 wert1] [var2 wert2])
...
; var1 und var2 sind nur innerhalb von let gültig
...
)
Prozeduren
Prozeduren gehören zu den wichtigsten Sprachelementen von Scheme. In der Regel erstellt man sie mit dem lambda-Befehl. Prozeduren können durch define einer Variable zugeteilt werden.(define test
(lambda (arg1 arg2)
... ))Der lambda-Befehl kann auch weggelassen werden:(define (test arg1 arg2)
...)
Aufgerufen wird diese Prozedur wie folgt:(test wert1 wert2)
Prozeduren müssen generell mit zwei Klammern eingeschlossen werden. Der Rückgabewert wird durch die letzte gültige Anweisung bestimmt. Beachtlich dabei ist, dass Scheme automatisch den geeignetsten Datentyp wählt.(define +
(lambda (x y)
(- x y)))+ würde jetzt nicht addieren, sondern subtrahieren.Listen
Listen werden in Scheme-Programmen relativ häufig gebraucht. Eine leere Liste wird mit '() gebildet. Durch cons kann eine Liste erweitert werden. Das ' gibt Scheme an, dass der nachfolgende Ausdruck nicht interpretiert werden soll, sondern dass eine Liste dargestellt wird.(cons 5 '())
Dies kann wie folgt abgekürzt werden :(list 1 2 3 4)
Listen in Scheme sind mit binären Bäumen vergleichbar. Die rechte Seite wird mit car dargestellt, die linke Seite mit cdr (sprich: „cudder“). Durch die Anwendung mit car erhält man für gewöhnlich einen Wert; cdr enthält einen Zeiger auf das nächste Element oder auf die leere Liste.(car '(1 2 3 4)) ;ergibt als Ausgabe: 1
Datentypen
Weitere Datentypen neben Listen sind unter anderem:
Wahr und falsch werden durch #t und #f dargestellt, wobei Scheme jedoch nur #f als wirklich falsch interpretiert würde; alles andere - auch leere Listen - gelten als wahr.Bedingungen
If:(if (= wert #t)
(display "Der Wert ist wahr")
(display "Der Wert ist falsch"))Cond:(cond ((= wert 1) (display "Der Wert ist 1"))
((= wert 2) (display "Der Wert ist 2"))
(else (display "Der Wert ist weder 1 noch 2)))Darüber hinaus gibt es noch when und case als weitere Möglichkeit, um mit Bedingungen zu arbeiten.Schleifen
Schleifen werden in Scheme für gewöhnlich durch eine Rekursion erreicht. Ein häufiges gezeigtes Beispiel, um dies zu demonstrieren, ist die Berechnung der Fakultät.(define fak
(lambda (x)
(if (= x 0) 1
(* x (fak (- x 1))))))Beispiele
Scheme-Quellcode kann in folgenden Wikipedia-Artikeln gefunden werden:
|
Der Ursprungsartikel stammt von der deutschsprachigen Wiki pedia (siehe oben: "Original Artikel & Autoren Liste"). Der Text steht unter der GNU Freie Dokumentation Lizenz. |