Typen ettiketieren ?
Allgemein Scheme
Tja, nachdem ich mir ja nun in Scheme ein paar Datenstruktueren angeschaut habe, habe ich festgestellt, dass die Daten ja mittels Listen und Paaren realisiert werden.
Bleibt nur die Frage, wie kann man die nun unterscheiden?
Kategorie Tja, nachdem ich mir ja nun in Scheme ein paar Datenstruktueren angeschaut habe, habe ich festgestellt, dass die Daten ja mittels Listen und Paaren realisiert werden.
Bleibt nur die Frage, wie kann man die nun unterscheiden?
In der deutschen Übersetzung nennen sie
es Typen etikettieren, da gefällt mir die englische Variante mit tagged
data ein wenig besser.
Wie funktioniert dies?
Na ja, eigentlich ist es ganz einfach.
Aus dem datum und dem tag erzeugt man ein "Paar".
Mittels folgender Prozedur ->
(define (attach-tag type-tag contents)
(cons type-tag contents))
der type-tag ist einfach ein Symbol, welches man für einen Typen definiert z.B. 'rat für rationale Zahlen.
Rationale Zahlen kann man als Paar von Zahlen (Zähler / Nenner) definieren, z.B. ( 1, 1 ) für die 1.
Mittels der Prozedur -> attach-tag würde dann daraus ein ('rat, ( 1 , 1 ) ) werden.
Die folgenden Prozeduren, lesen dann einmal das Tag und einmal den Content aus.
(define (type-tag datum)
(if (pair? datum)
(car datum)
(error "Bad tagged datum -- TYPE-TAG" datum)))
(define (contents datum)
(if (pair? datum)
(cdr datum)
(error "Bad tagged datum -- CONTENTS" datum)))
Gruß JJR
P.S.: Heute ein wenig kurz, vor ein paar Stunden erst aus Carolinensiel zurückgekehrt.
Wie funktioniert dies?
Na ja, eigentlich ist es ganz einfach.
Aus dem datum und dem tag erzeugt man ein "Paar".
Mittels folgender Prozedur ->
(define (attach-tag type-tag contents)
(cons type-tag contents))
der type-tag ist einfach ein Symbol, welches man für einen Typen definiert z.B. 'rat für rationale Zahlen.
Rationale Zahlen kann man als Paar von Zahlen (Zähler / Nenner) definieren, z.B. ( 1, 1 ) für die 1.
Mittels der Prozedur -> attach-tag würde dann daraus ein ('rat, ( 1 , 1 ) ) werden.
Die folgenden Prozeduren, lesen dann einmal das Tag und einmal den Content aus.
(define (type-tag datum)
(if (pair? datum)
(car datum)
(error "Bad tagged datum -- TYPE-TAG" datum)))
(define (contents datum)
(if (pair? datum)
(cdr datum)
(error "Bad tagged datum -- CONTENTS" datum)))
Gruß JJR
P.S.: Heute ein wenig kurz, vor ein paar Stunden erst aus Carolinensiel zurückgekehrt.