rendered paste body;; 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))
)