;; 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-assignments-reader.ss" "deinprogramm")((modname polymorphe_listen) (read-case-sensitive #f) (teachpacks ()) (deinprogramm-settings #(#f write repeating-decimal #t #t none explicit #f ()))) (define-record-procedures leere-liste make-leere-liste leer? ()) (: make-leere-liste (-> leere-liste)) (: leer? (%value -> boolean)) (define leer (make-leere-liste)) (define-record-procedures-parametric-2 nll nll-of kons nichtleer? (kopf rumpf)) (: kons (%a (liste %a) -> (nll-of %a (liste %a)))) (: nichtleer? (%value -> boolean)) (: kopf ((nll-of %a (liste %a)) -> %a)) (: rumpf ((nll-of %a (liste %a)) -> (liste %a))) (define liste (lambda (sort) (signature (mixed leere-liste (nll-of sort (liste sort)))))) ; Elemente einer Liste addieren (: list-sum ((liste number) -> number)) (define list-sum (lambda (xs) (cond ((leer? xs) 0) ((nichtleer? xs) (+ (kopf xs) (list-sum (rumpf xs))))))) (: list-length ((liste %a) -> number)) (define list-length (lambda (xs) (cond ((leer? xs) 0) ((nichtleer? xs) (+ 1 (list-length (rumpf xs))))))) (define liste-1 leer) (define liste-2 (kons 1 liste-1)) (define liste-3 (kons 2 liste-2)) (list-length liste-3) (: list-1 (liste number)) (define list-1 (kons "Banane" (kons 1 leer))) list-1 ;Signaturverletzung wird nicht erkannt, außer bei ;define-record-procedures-parametric-2 und dazugehoerigem Sprachlevel ;"mit Zuweisungen" (kopf list-1); Signaturverletzung wird erkannt (: list-2 (liste number)) (define list-2 (kons 1 (kons 4 leer))) (list-sum list-2) list-2 (: list-3 (liste string)) (define list-3 (kons "Apple" (kons "Banana" leer))) list-3 (: list-4 (liste (liste string))) (define list-4 (kons list-3 leer)) (: list-5 (liste string)) (define list-5 list-4) ;Signaturverletzung wird nicht erkannt, außer bei ;define-record-procedures-parametric-2 und dazugehoerigem Sprachlevel ;"mit Zuweisungen" (: list-6 (liste %value)) (define list-6 (kons 1 (kons "Banana" leer))) (kopf list-6) (: list-7 (nll-of number leere-liste)) (define list-7 (kons "Banana" leer))