All pastes #183720 Raw Edit

Stuff

public text v1 · immutable
#183720 ·published 2006-09-27 04:18 UTC
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))
)