;; 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