Informatik I
Wintersemester 2008/09
Lehrstuhl für Programmiersprachen und Übersetzerkonstruktion
Vergleich DrScheme / Standard Scheme
Um die Programmierung erleichtern, weicht das
DrScheme-System in einigen Punkten vom
Scheme-Standard,
wie er in vielen anderen Scheme-Implementierungen
und Textbüchern benutzt wird, ab. Im folgenden werden die Besonderheiten
von DrScheme, soweit sie in der Vorlesung benutzt werden, erläutert.
Mit diesen Erläuterungen kann man die Beispiele aus der Vorlesung
auch in den Scheme-Standard umsetzen.
Namen von Konstanten und Prozeduren
In DrScheme werden verschiedene Konstanten und Namen mit sinnvolleren
Namen bezeichnet. Die folgende Tabelle stellt einiger dieser gegenüber.
DrScheme | Standard-Scheme |
true | #t |
false | #f |
empty | '() |
empty? | null? |
first | car |
rest | cdr |
set-first! | set-car! |
set-rest! | set-cdr! |
Strukturdefinition
In DrScheme kann man Datenstrukturen mittels der Strukturdefinition
(define-struct name (k1 ... kn))
einführen. Damit werden die folgenden Bezeichner eingeführt:
-
(make-name x1...xn)
Implementierung in Standard-Scheme:
(define (make-name x1...xn) (cons 'name (list x1...xn)))
-
(name-ki x) (für i=1,...,n)
Implementierung in Standard-Scheme:
(define (name-ki x)
(if (eq? (car x) 'name)
(car (cdr (... (cdr x)))) ; cdr kommt hier i-mal vor
(error "name-ki: Falsche Struktur")))
-
(name? x)
Implementierung in Standard-Scheme:
(define (name? x) (eq? (car x) 'name))
-
(set-name-ki! x v) (für i=1,...,n)
Implementierung in Standard-Scheme:
(define (set-name-ki! x v)
(if (eq? (car x) 'name)
(set-car! (cdr (... (cdr x))) v) ; cdr kommt hier i-mal vor
(error "set-name-ki!: Falsche Struktur")))
Lokale Definitionen
Falls eine lokale Definition direkt in einer anderen Definition vorkommt,
wie in
(define (p x1...xn)
(local (...Definitionen...)
ausdruck))
dann kann das local in Standard-Scheme weggelassen werden:
(define (p x1...xn)
...Definitionen...
ausdruck)
In anderen Fällen kann local in Standard-Scheme
durch begin ersetzt werden.
Michael Hanus