(load "ub2-7.scm") ;;; Datentyp "polygon" ;;; ein "polygon" ist eine Struktur (make-polygon vertices), wobei ;;; vertices eine Liste von "posn"s ist, die die Ecken des Polygons ;;; beschreiben. Diese Liste muß mindestens zwei Ecken enthalten! ;;; Zwei Ecken dürfen nicht zusammenfallen und zwei Seiten dürfen sich ;;; nicht schneiden. (define-struct polygon (vertices)) ;;; SIGNATUR ;;; polygon-move: polygon posn -> polygon ;;; ERKLÄRUNG ;;; (polygon-move poly p) erzeugt eine um p verschobene Kopie des Polygons ;;; poly. ;;; BEISPIEL ;;; (polygon-move (make-polygon (list (make-posn 0 0) (make-posn 1 0) ;;; (make-posn 0.5 1))) (make-posn 5 1)) ;;; => (make-polygon (list (make-posn 5 1) (make-posn 6 1) (make-posn 5.5 2))) ;;; DEFINITION (define polygon-move (lambda (poly p) (make-polygon (list-posn-move (polygon-vertices poly) p)))) ;;; SIGNATUR ;;; list-posn-move: list(posn) posn -> list(posn) ;;; ERKLÄRUNG ;;; (list-posn-move v p) erzeugt eine Liste, die aus den um p verschobenen ;;; Kopien der Komponenten von v besteht. ;;; BEISPIEL ;;; (list-posn-move (list (make-posn 0 1) (make-posn 1 1)) (make-posn 5 1)) ;;; => (list (make-posn 5 2) (make-posn 6 2)) ;;; DEFINITION (define list-posn-move (lambda (v p) (if (null? v) '() (cons (posn-move (car v) p) (list-posn-move (cdr v) p)))))