Datenabstraktion

Aus ProgrammingWiki
Archivierte Version vom 2009-05-25T15:29:49+00:00. Aktuelle Version

Inhaltsverzeichnis

Zur Übersicht

Die folgenden Aufgaben beziehen sich direkt auf die in der Vorlesung verwendete Linienführung und die vorgestellten Beispiele. In dieser Übung werden Sie unter Anderem den ADT Stack implementieren.

Get Type

Schreiben Sie eine Prozedur

get-type, 

die das Typ-Kennzeichen des Übergebenen Wertes als Symbol zurückgibt, und wenden Sie sie auf einige Beispiele an.

Aufrufbeispiel:

> (define p1 (put-type 'point (vector 2 38 3)))
> (get-type p1)
point

<eval> (define p1 (put-type 'point (vector 2 38 3))) (get-type p1)</eval>

Stack

Schreiben Sie für alle in der Signatur des ADT stack angegebenen Operationen die entsprechenden Schemeprozeduren unter Verwendung von Scheme-Listen. Stellen Sie sicher, das die im Skript genannten Axiome gelten!

Hinweis: Beachten Sie bei der Implementation das 4-Stufen-Modell!!!

Stufen

1. Stufe: Liste

2. Stufe

3. Stufe

<eval>;Testbereich für den Stack Datentyp</eval>

Vektor

Ändern Sie nun ihre Implementation des ADT stack so, dass sie statt Listen Vektoren verwendet. Stellen Sie sicher, dass der ADT immer noch die selbe Funtionalität hat. Hinweis: Wenn Sie das 4-Stufen-Modell korrekt angewandt haben, sollten keine änderungen der Prozeduren auf Stufe 3 und 4 vorgenommen worden sein.

1. Stufe Vektor

2. Stufe

<eval></eval>

generische Operationen

add

Schreiben Sie eine generische Operation

add

, die je nach Typ der Parameter das entsprechende leistet. Die möglichen Parametertypen sollen Zahlen, Punkte im 3-Dimensionalen Raum sowie strings sein. Die Prozedur soll mit explizit etikettierten Daten arbeiten (siehe Kaptiel 6.1, Daten mit Typetikett)! Erproben Sie anschließend ihre Prozedur.

Aufrufbeispiel:

> (define zahl1 (put-type 'number 4))
> (define zahl2 (put-type 'number 9))
> (add zahl1 zahl2)
13

<eval> (define zahl1 (put-type 'number 4)) (define zahl2 (put-type 'number 9)) (add zahl1 zahl2)</eval>

Typ Operator Tabelle

Erweitern Sie die Typ-Operator-Tabelle aus Kapitel 6.5 so, dass die Operationen add und minus auch für Punkte im zweidimensionalen Raum anwendbar sind. Dies hat den praktischen Vorteil, dass sämtliche Anwendungsprozeduren, die mit Punkten arbeiten, unverändert übernommen werden können.

<eval></eval>

distance-to

Ergänzen Sie

distance-to 

in

point-maker 

(siehe Kapitel 6.6, Message Passing).Sendet man distance-to mit einem Punkt p-base an einen beliebigen Punkt p, so soll der Abstand zwischen p und p-base zurückgegeben werden. Vergessen Sie nicht, vor der Erprobung zwei Punkte mit der dann erweiterten Prozedur point-maker zu definieren. Der oben definierte Punkt p1 kann nicht genommen werden, da er die Operation distance-to nicht versteht. Aufrufbeispiel:

> (define p1 (point-maker 2 38 3))
> (p1 'distance-to (point-maker 4 23 -2))
15.937377450509228

<eval>(define p1 (point-maker 2 38 3)) (p1 'distance-to (point-maker 4 23 -2))<eval></eval></eval>

Zur Übersicht