(define-struct times (h m)) (define-struct client (id entry exit)) ;; parking-time: client -> number ;; calculates the parking time of the vehicle (define (parking-time x) (- (+ (* (times-h (client-exit x)) 60) (times-m (client-exit x))) (+ (* (times-h (client-entry x)) 60) (times-m (client-entry x))))) (check-expect (parking-time (make-client 1233 (make-times 10 30) (make-times 15 30))) (* 5 60)) (check-expect (parking-time (make-client 1234 (make-times 12 30) (make-times 13 00))) 30) ;; parking-fee (listof client) -> number ;; berechnet die parkgebuehren nach einer tabelle (define (parking-fee lst) (foldr (lambda (x y) (+ y (cond [(<= (parking-time x) 30) 0.50] [(<= (parking-time x) 60) 1.20] [(<= (parking-time x) 360) (* (- (times-h (client-exit x)) (times-h (client-entry x))) 1.50)] [else 10]))) 0 lst)) (check-expect (parking-fee (list (make-client 1233 (make-times 10 30) (make-times 15 30)))) (* 5 1.50)) (check-expect (parking-fee (list (make-client 1233 (make-times 10 30) (make-times 11 00)))) 0.50) (check-expect (parking-fee (list (make-client 1233 (make-times 10 30) (make-times 18 00)))) 10) (define-struct file (name mb)) (define f1 (make-file "A" 10.8)) (define f2 (make-file "B" 11.1)) (define f3 (make-file "C" 0.15)) (define files (list f1 f2 f3)) ;; fill-medium: number (listof file) -> (listof string) ;; fuellt das speicher medium mit dateien (define (fill-medium cap lst) (cond [(empty? lst) empty] [(< (file-mb (first lst)) cap) (cons (file-name (first lst)) (fill-medium (- cap (file-mb (first lst))) (rest lst)))] [else (fill-medium cap (rest lst))])) (fill-medium 11 files)