;; 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 mymlist) (read-case-sensitive #f) (teachpacks ()) (deinprogramm-settings #(#f write repeating-decimal #t #t none explicit #f ()))) ; Ein eigener Listenkonstruktor ohne define-record-procedures (define mcons (lambda (x y) (lambda (m) (cond ((equal? m "mfirst") x) ((equal? m "set-mfirst!") (lambda (v) (set! x v))) ((equal? m "mrest") y) ((equal? m "set-mrest!") (lambda (v) (set! y v))))))) (define mfirst (lambda (xs) (xs "mfirst"))) (define set-mfirst! (lambda (xs v) ((xs "set-mfirst!") v))) (define mrest (lambda (xs) (xs "mrest"))) (define set-mrest! (lambda (xs v) ((xs "set-mrest!") v))) ; Umwandlung veränderbaren Liste in "normale" Liste: (define mlist->list (lambda (xs) (if (empty? xs) empty (cons (mfirst xs) (mlist->list (mrest xs)))))) ; Hänge zwei Listen hintereinander durch Abänderung des Endes ; der ersten Liste: ; Finde letztes mcons einer Liste: (define last-mcons (lambda (xs) (if (empty? (mrest xs)) xs (last-mcons (mrest xs))))) (define append! (lambda (xs ys) (set-mrest! (last-mcons xs) ys))) (define l1 (mcons 1 (mcons 2 empty))) (define l2 (mcons 3 (mcons 4 empty)))