;; Question 4 (define-struct clock (hour min sec)) ;; clock is a structure: (make-clock hour min sec) ;; will create a digital clock with (a) given hour(s), minute(s) and second(s) ;; helper function for hour part of tick (define (addHour clk) (cond [(and (> (+ (clock-hour clk) 1) 12) (> (+ (clock-min clk) 1) 59) (> (+ (clock-sec clk) 1) 59)) 1] [(and (<= (clock-hour clk) 12) (> (+ (clock-min clk) 1) 59) (> (+ (clock-sec clk) 1) 59)) (+ (clock-hour clk) 1)] [else (clock-hour clk)] ) ) ;; helper function for minute part of tick (define (addMin clk) (cond [(and (> (+ (clock-min clk) 1) 59) (> (+ (clock-sec clk) 1) 59)) 0] [(and (<= (clock-min clk) 59) (> (+ (clock-sec clk) 1) 59)) (+ (clock-min clk) 1)] [else (clock-min clk)] ) ) ;; helper function for second part of tick (define (addSec clk) (cond [(>= (clock-sec clk) 59) 0] [(<= (+ (clock-sec clk) 1) 59) (+ (clock-sec clk) 1)] ) ) ;; tick : structure -> structure ;; increases an interval of a given clock by 1 second ;; examples : (tick (make-clock 12 59 58)) ;; will return (make-clock 12 59 59) ;; (tick (make-clock 12 59 59)) ;; will return (make-clock 1 0 0) ;; (tick (make-clock 12 0 59)) ;; will return (make-clock 12 1 0) (define (tick clk) (make-clock (addHour clk) (addMin clk) (addSec clk)) )