Dieser Artikel von Wikipedia ist u.U. veraltet. Die neue Version gibt es hier. Die Programmiersprache Scheme ist ein LISP -Dialekt. Es unterstützt sowohl funktionale als auch imperative Programmierung. Scheme liegt das Prinzip zugrunde eine Programmiersprache nicht dadurch beschreibungsmächtig wird dass Feature über Feature häuft sondern dadurch dass unnötige Einschränkungen entfernt. Z.B. gibt es im keine Hilfsmittel zur objektorientierten Programmierung es ist dank Makros und λ-Ausdrücken sehr einfach sich solche in der zu programmieren: Scheme ist eine programmierbare Programmiersprache von der Programmiererin bei Bedarf sehr flexibel werden kann.
Variablen werden durch define let und einigen anderen Anweisungen definiert wobei 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 gültig.
(let ([var1 wert1] [var2 wert2]) ... var1 und var2 sind nur innerhalb von let gültig ... )
Prozeduren gehören zu den wichtigsten Sprachelementen Scheme. In der Regel erstellt man sie dem lambda -Befehl. Prozeduren können durch define einer Variable zugeteilt werden.
Beispiel: Eine Prozedur mit zwei Argumenten
(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 werden. Der Rückgabewert wird durch die letzte Anweisung bestimmt. Beachtlich dabei ist dass Scheme den geeignetsten Datentyp wählt.
Man unterscheidet zwei Arten von Prozeduren: die durch den Programmierer erstellt werden und die bereits vordefiniert sind ( set! car cdr + - * / ). Diese vordefinierten Prozeduren können neu definiert wie folgendes Beispiel zeigt:
(define + (lambda (x y) (- y)))
+ würde jetzt nicht addieren sondern subtrahieren.
Listen werden in Scheme-Programmen relativ häufig Eine leere Liste wird mit '() gebildet. cons kann eine Liste erweitert werden. Das gibt Scheme an dass der nachfolgende Ausdruck interpretiert werden soll sondern dass eine Liste wird.
Beispiel:
(cons 5 '())
(cons 1 (cons 2 (cons 3 4 '()))))
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 oder auf die leere Liste.
Wahr und falsch werden durch #t und #f dargestellt Scheme jedoch nur #f als wirklich falsch interpretiert würde; alles andere – auch Listen – gelten als wahr .
Schleifen werden in Scheme für gewöhnlich eine Rekursion erreicht. Ein häufiges gezeigtes Beispiel um zu demonstrieren ist die Berechnung der Fakultät .
(define fak (lambda (x) (if (= 0) 1 (* x (fak (- x