;; assign_letter_grade consumes a number and produces a symbol.
;;
;; (assign_letter_grade ave) produces either 'A, 'B, 'C, 'D or 'F
;;   depending on the average. This function uses the following
;;   (contorted) grading function:
;;
;; if the grade is > 90
;;   then the grade is 'A
;;   otherwise,
;;    if the grade is > 80
;;      then if the grade is even, it is B+, otherwise B-
;;    otherwise if the grade > 65, 
;;          then if the grade is divisible by 5 it is an 'A,
;;                    otherwise a 'c'
;;          otherwise the grade is F
;;
;;  example: (assign_letter_grade 86)
(define (assign_letter_grade ave)
  (cond
    ;; if average is above 90 - A
    [(> ave 90) 'A]
	;; if average is between 80 and 90
    [(> ave 80)
     (cond
	   ;; if average is even, grade is B+
       [(= 0 (modulo ave 2)) 'B+]
       ;; if average is odd, grade is B-
       [else 'B-])]
    ;; if average is between 65 and 80
    [(> ave 65)
     (cond 
	   ;; if average is divisible by 5, grade is A
       [(= 0 (modulo ave 5)) 'A]
       ;; otherwise grade is C
       [ else 'C])]
    ;; average is less than 65 - grade is F
    [else 'F]))

;; assign_letter_grade tests
;;(assign_letter_grade 92)  ; should produce 'A
;;(assign_letter_grade 89)  ; should produce 'B-
;;(assign_letter_grade 88)  ; should produce 'B+
;;(assign_letter_grade 70)  ; should produce 'A
;;(assign_letter_grade 35)  ; should produce 'F