diff --git a/Daten_beliebiger_Gr__e.html b/Daten_beliebiger_Gr__e.html index 906558b..66fd449 100644 --- a/Daten_beliebiger_Gr__e.html +++ b/Daten_beliebiger_Gr__e.html @@ -155,7 +155,7 @@ des make-person Konstruktors ein:

(define (promote p t)
  (cond [(person? p)
         (make-person
            (string-append t (person-name p))
            (promote (person-father p) t)
            (promote (person-mother p) t))]
        [else p]))

9.3 Formale Signaturen für rekursive Datentypen

Wir können formale Signaturen auch für rekursive Datentypen verwenden. Den äußeren Summentyp können wir über den Signaturkonstruktur mixed abbilden. Wichtig an der formalen Signatur FamilyTree ist, dass die -Definition selber rekursiv ist.

(define-struct person (name father mother))
 
(define FamilyTree (signature
   (mixed (enum #false)
          (PersonOf String FamilyTree FamilyTree))))

Diese Datentyp kann nun wie gewohnt in Signaturen verwendet werden, +Definition selber rekursiv ist.

(define-struct person (name father mother))
 
(define FamilyTree (signature
   (mixed False
          (PersonOf String FamilyTree FamilyTree))))

Dieser Datentyp kann nun wie gewohnt in Signaturen verwendet werden, beispielsweise:

(: Bob FamilyTree)
 
(: person-has-ancestor (FamilyTree String -> Boolean))
(define (person-has-ancestor p a) ...)

9.4 Listen

Die FamilyTree Datendefinition von oben steht für eine Menge von Bäumen, in denen jeder Knoten genau zwei ausgehende Kanten hat. Selbstverständlich können wir auch auf die gleiche Weise Bäume repräsentieren, die drei oder fünf ausgehende Kanten haben — indem wir