;; Die ersten drei Zeilen dieser Datei wurden von DrRacket eingefügt. Sie enthalten Metadaten ;; über die Sprachebene dieser Datei in einer Form, die DrRacket verarbeiten kann. #reader(lib "DMdA-vanilla-reader.ss" "deinprogramm")((modname zlisten) (read-case-sensitive #f) (teachpacks ()) (deinprogramm-settings #(#f write repeating-decimal #f #t none explicit #f ()))) ; Eine leere Liste ist ein Wert ; (make-leere-liste) (define-record-procedures leere-liste make-leere-liste leer? ()) (: make-leere-liste (-> leere-liste)) (: leer? (%value -> boolean)) ; "leer" ist ein zusätzlicher Name für eine leere ; Liste (define leer (make-leere-liste)) ; Eine Zahlenliste ist eine leere Liste ; oder eine nichtleere Liste (define zahlenliste (signature (mixed leere-liste nll))) ; Eine nichtleere Liste (nll) ist ein Wert ; (kons z l), wobei z eine Zahl ist ; und l eine Zahlenliste. (define-record-procedures nll kons nichtleer? (kopf rumpf)) (: kons (number zahlenliste -> nll)) (: nichtleer? (%value -> boolean)) (: kopf (nll -> number)) (: rumpf (nll -> zahlenliste)) ; gibt eine lesbare Stringrepräsentation ; einer Zahlenliste zurück. (: ausgabe (zahlenliste -> string )) (define ausgabe (lambda (l) (string-append "[ " (ausgabe-helper l) "]") )) ; Hilfsprozedur für ausgabe. Gibt die Elemente ; einer Zahlenliste als String zurück. (: ausgabe-helper (zahlenliste -> string)) (define ausgabe-helper (lambda (l) (cond ((leer? l) "") ((nichtleer? l) (string-append (number->string (kopf l)) " " (ausgabe-helper (rumpf l))))) )) (check-expect (ausgabe (kons 5 (kons 4 (kons 7 leer)))) "[ 5 4 7 ]") (check-expect (ausgabe leer) "[ ]")