;; 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 mlist) (read-case-sensitive #f) (teachpacks ()) (deinprogramm-settings #(#f write repeating-decimal #t #t none explicit #f ()))) ; Dieses Modul stellt veränderbare Listen zur Verfügung (provide mlist-of mcons mcons? mfirst mrest set-mfirst! set-mrest!) ; Eine veränderbare nicht-leere Liste besteht aus: ; - einem ersten Element ; - einer Restliste (define-record-procedures-parametric-2 ne-mlist ne-mlist-of mcons mcons? ((mfirst set-mfirst!) (mrest set-mrest!))) ; Eine veränderbare Liste ist eins der folgenden: ; - eine leere Liste ; - eine veränderbare nicht-leere Liste (define mlist-of (lambda (sig) (signature (mixed empty-list (ne-mlist-of sig (mlist-of sig)))))) (: mcons (%a (mlist-of %a) -> (ne-mlist-of %a (mlist-of %a)))) (: mcons? (any -> boolean)) (: mfirst ((ne-mlist-of %a (mlist-of %a)) -> %a)) (: set-mfirst! ((ne-mlist-of %a (mlist-of %a)) %a -> unspecific)) (: mrest ((ne-mlist-of %a (mlist-of %a)) -> (mlist-of %a))) (: set-mrest! ((ne-mlist-of %a (mlist-of %a)) (mlist-of %a) -> unspecific)) (: mlist->list ((mlist-of %a) -> (list-of %a))) (define mlist->list (lambda (xs) (if (empty? xs) empty (cons (mfirst xs) (mlist->list (mrest xs)))))) (define xs (mcons 1 (mcons 2 empty))) (define ys (mcons xs xs)) (define zs (mcons (mcons 1 (mcons 2 empty)) (mcons 1 (mcons 2 empty)))) ; Setze das erste Element des ersten Elements (Liste) auf 9: (define set-ff-9 (lambda (xs) (begin (set-mfirst! (mfirst xs) 9) xs)))