Problem 2. Mrs. Stricktor, a snake collector, keeps track of her collection with ``snake records'' such as these:
(define-struct boa (name dob length weight)) ;; A Snake is a structure: ;; (make-boa String Date Number Number). (define-struct date (year month day)) ;; A Date is a structure: ;; (make-date Number Number Number).
Because she has been bitten recently, she is going to out-source the next software job. Your company got the contract. And so your manager has just handed you this task:
Design a function that computes the age of a boa in years from a snake record and the current date.
Solution:
;; Grader: Felix
;; snake-age : Snake Date -> Number [1pt]
;; determine the age of the snake in years [1pt]
;; example: given: [1pt]
;; (make-boa "bella" (make-date 1988 11 28) 10 20)
;; (make-date 2005 10 18)
;; wanted:
;; 17
(define (snake-age b current-date)
(date-year-delta current-date (boa-dob b)))
;; [1pt for structure selector]
;; [+4pts, if date-year-delta is properly in-lined]
;; date-year-delta : Date Date -> Number [1pt]
;; subtract number of years of second from first [1pt]
;; example: given: [0pt]
;; (make-date 1988 11 28)
;; (make-date 2005 10 18)
;; wanted:
;; 17
(define (date-year-delta d1 d2)
(- (date-year d1) (date-year d2)))
;; [1pt for structure selector, 1pt for correctness]
;; Tests: [2pts for proper # of correct tests,
;; 3pts if no examples]
(equal? (date-year-delta
(make-date 1988 11 28)
(make-date 2005 10 18))
17)
(equal? (snake-age
(make-boa "bella" (make-date 1988 11 28) 10 20)
(make-date 2005 10 18))
17)