Exercise 4.4.3: (back)
;; pay-back : number -> number
;; Examples: (pay-back 400) => 1
;; Examples: (pay-back 1400) => 5.75
;; Examples: (pay-back 2000) => 10
;; Examples: (pay-back 2600) => 14.75
(define (pay-back amount)
(cond
[(<= amount 500) (pay-back-charge amount 0.25)]
[(<= amount 1500) (+ (pay-back 500) (pay-back-charge (- amount 500) 0.50))]
[(<= amount 2500) (+ (pay-back 1500) (pay-back-charge (- amount 1500) 0.75))]
[(> amount 2500) (+ (pay-back 2500) (pay-back-charge (- amount 2500) 1.0))]))
;; pay-back-charge : number -> number
(define (pay-back-charge amount rate)
(* rate (/ 1 100) amount))
;; Tests
> (= (pay-back 400) 1)
true
> (= (pay-back 1400) 5.75)
true
> (= (pay-back 2000) 10)
true
> (= (pay-back 2600) 14.75)
true