Rudimentäres Scheme

Michael Sperber

April 10, 2003

1  Wörter

1.1  Zahlen

ganze Zahlen

23, 42, 189473248732424

Brüche

1/3, 2390874/132948576

inkorrekt: 2390874 /132948576 (enthält Leerzeichen)

Fließkomma

0.3, 3.1415926, 6.02e23, -.738E-17

Hinweis: Solche Zahlen werden im allgemeinen nur mit beschränkter Genauigkeit dargestellt.

1.2  Leerzeichen und Zeilenumbrüche

Ein Leerzeichen oder ein Zeilenumbruch ist notwendig, um zwei Wörter, die nebeneinander stehen, voneinander zu trennen.

Sie sind außerdem zulässig (aber nicht notwendig) vor und nach Klammern. Ansonsten haben zusätzliche Leerzeichen und Zeilenumbrüche keine Auswirkungen auf die Bedeutung eines Programms.

1.3  Klammern

Linke Klammern und rechte Klammern müssen in Zahl und Art übereinstimmen.

Hinweis: Klammern haben immer Bedeutung in einem Programm. Es nicht erlaubt, Klammernpaare hinzuzufügen oder wegzulassen, auch wenn die Bedeutung vorher und nachher "`intuitiv"' gleich ist.

1.4  Namen

Namen können aus folgenden Bestandteilen bestehen:

Folgende Bestandteile dürfen nicht vorkommen:

Korrekte Beispiele:

Inkorrekte Beispiele:

1.5  Kommentare

Alles, was auf einer Zeile nach einem Semikolon (das nicht innerhalb einer Zeichenkette steht) folgt, wird von Scheme ignoriert und kann damit als Kommentar dienen.

Beispiel:

(define pi 3.14159265) ; wichtige Konstante

1.6  Symbole

Symbole folgen den gleichen Buchstabierungsregeln wie Namen, nur mit einem Apostroph (gesprochen "`Quote"') davor.

Beispiele:

Hinweis: Es gibt keine besondere Verbindung zwischen dem Symbol 'yes (einem ganz normalen Wert) und einer eventuell definierten Variable namens yes.

1.7  Zeichenketten

Eine Zeichenkette repräsentiert ein Stück beliebigen Text. Der Text wird dafür zwischen doppelte Anführungszeichen gesetzt. Eventuell darin vorkommende doppelte Anführungszeichen werden als \" dargestellt; eventuell vorkommende \ werden als \\ dargestellt. Beispiele:

2  Syntax

2.1  Funktionsaufrufe

Der Ausdruck

(f esb0 esb1 ... esbn)

ist eine Anwendung (oder ein Aufruf) der Funktion f auf die Ergebnisse der Ausdrücke e0, e1, ..., en. Beispiele:

Hinweise:

Inkorrekte Beispiele:

2.2  Variablendefinitionen

(define v e)

definiert die Variable v auf den Wert des Ausdrucks e, so daß zukünftige Vorkommen von v durch den Wert von e ersetzt werden.

Beispiele:

2.3  Funktionsdefinitionen

(define (f psb1 psb1 ...psbn)
  e)

definiert die Funktion f. Jeder Parameter pi ist ein Variablenname, und diese Variablen können innerhalb des Rumpfes e verwendet werden.

Beispiele:

2.4  Fallunterscheidungen

(cond (qsb1 asb1)
      (qsb2 asb2)
      ...(qsbn asbn))

Dieser Ausdruck gibt den Wert einer der ai zurück, je nachdem welcher der Ausdrücke qi (die jeweils einen Wahrheitswert ergeben müssen) der erste ist, der true ergibt. Statt der letzten Frage qn kann auch das Schlüsselwort else erscheinen, was besagt, daß der Ausdruck an ergeben soll, wenn keine der Fragen true ergeben hat.

Beispiel:

(cond ((> temperatur 35) 'heiss)
      ((> temperatur 25) 'warm)
      ((> temperatur 15) 'mittel)
      (else 'kalt))

Hinweise:

Inkorrekte Beispiele:

(cond (< number 4) 5
      (>= number 4) 6)

Hier fehlen Klammern um die Klauseln.

(cond ((+ bignum 4) 5)
      ((- bignum 4) 6))

In diesem Fall ergeben die Fragen keine Wahrheitswerte.

2.5  Strukturdefinitionen

(define-struct n (fsb1 fsb2 ... fsbn))

Dabei ist n der Name der Struktur und die fi (ihrerseits Namen) sind Felder. Diese Strukturdefinition definiert mehrere Funktionen auf einmal:

Die Funktion make-n heißt Konstruktor, die Funktion n? heißt Prädikat, und die die v-fi heißen Selektoren. Beispiel:

;; Ein Name besteht aus zwei Symbolen - Vor- und Nachname
(define-struct name (personal family))
;; make-name: symbol x symbol -> name
;; name?: object -> boolean
;; name-personal: name -> symbol
;; name-family: name -> symbol

3  Vokabular

3.1  Schlüsselwörter

Ein syntaktisches Schlüsselwort nach einer öffnenden Klammer bedeutet, daß zwischen den Klammern kein Funktionsaufruf, sondern eine Spezialform steht, bei der besondere Regeln gelten. Die syntaktischen Schlüsselwörter in rudimentärem Scheme sind define, cond, else und define-struct. (Erläuterungen im vorangegangenen Abschnitt.)

3.2  Arithmetik

3.3  Numerische Konstanten

3.4  Wahrheitswerte und Prädikate

Beispiele:

(or (<= 1 3) (zero? 5)) => true
(and (<= 1 3) (zero? 5)) => false
(and (<= 1 3) (not (zero? 5))) => true

3.5  Listen

Beispiele:

(cons 'element empty) => (cons 'element empty)

(define pizza-toppings
  (cons 'anchovies (cons 'salami (cons 'gummi empty))))

pizza-toppings => (cons 'anchovies (cons 'salami (cons 'gummi empty)))

(first pizza-toppings) => 'anchovies

(rest pizza-toppings) => (cons 'salami (cons 'gummi empty))

(first (rest pizza-toppings)) => 'salami

(empty? pizza-toppings) => false

(cons? pizza-toppings) => true

(empty? (rest (rest (rest pizza-toppings)))) => true

3.6  Sonstiges

Last modified: Thurs, April 10, 2003, 12:44 pm MET-1MST-2,M3.5.0,M10.5.0
HTML conversion by TeX2page 4q7d