The question was: In this example
;; ball-after-tick : Ball -> Ball ;; GIVEN: The state of a ball b ;; RETURNS: the state of given ball at the next tick ;; STRATEGY: cases on whether ball would hit the wall on ;; the next tick (define (ball-after-tick b) (if (ball-would-hit-wall? b) (ball-after-bounce b) (ball-after-straight-travel b)))What should be the contract and purpose statement for ball-after-bounce and ball-after-straight-travel?
Each of these is a good place to use WHERE clauses to distinguish functions with similar purposes. Here's one solution:
;; ball-after-bounce : Ball -> Ball ;; GIVEN: The state of a ball b ;; WHERE: the ball will bounce on the next tick ;; RETURNS: the state of given ball at the next tick ;; ball-after-straight-travel : Ball -> Ball ;; GIVEN: The state of a ball b ;; WHERE: the ball does not bounce on the next tick ;; RETURNS: the state of given ball at the next tick
Last modified: Tue Jul 26 22:01:37 Eastern Daylight Time 2016