Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;; A Grade is: (make-grade Symbol Number)
- (define-struct grade (letter num))
- ;; The Symbol in a Grade represents
- ;; 'A >= 90
- ;; 'B >= 80
- ;; 'C >= 70
- ;; 'D >= 60
- ;; 'F < 60
- ;; A [Listof Grades] ...
- (define grades
- (list (make-grade 'D 62) (make-grade 'C 79) (make-grade 'A 93) (make-grade 'B 84)
- (make-grade 'F 57) (make-grade 'F 38) (make-grade 'A 90) (make-grade 'A 95)
- (make-grade 'C 76) (make-grade 'A 90) (make-grade 'F 55) (make-grade 'C 74)
- (make-grade 'A 92) (make-grade 'B 86) (make-grade 'F 43) (make-grade 'C 73)))
- ;; A1.1
- (check-expect (log->lon grades)
- (list 62 79 93 84 57 38 90 95 76 90 55 74 92 86 43 73))
- (define (log->lon log)
- (local [(define (grade->number grade)
- (grade-num grade))]
- (map grade->number log)))
- ;; A1.2
- (check-expect (best-grade grades) (make-grade 'A 95))
- (define (best-grade log)
- (local [(define (higher-grade grade1 grade2)
- (cond [(> (grade-num grade1)
- (grade-num grade2)) grade1]
- [else grade2]))]
- (foldr higher-grade (first log) log)))
- ;; A1.3
- (check-expect (just-As grades) (list
- (make-grade 'A 93)
- (make-grade 'A 90)
- (make-grade 'A 95)
- (make-grade 'A 90)
- (make-grade 'A 92)))
- (define (just-As log)
- (local [(define (check-a grade)
- (symbol=? (grade-letter grade) 'A))]
- (filter check-a log)))
- ;; A1.4
- (check-expect (all-pass? grades) false)
- (define (all-pass? log)
- (local [(define (check-f grade)
- (not (symbol=? (grade-letter grade) 'F)))]
- (andmap check-f log)))
- ;; A1.5
- (check-expect (bonus grades)
- (list
- (make-grade 'D 67)
- (make-grade 'B 84)
- (make-grade 'A 98)
- (make-grade 'B 89)
- (make-grade 'D 62)
- (make-grade 'F 43)
- (make-grade 'A 95)
- (make-grade 'A 100)
- (make-grade 'B 81)
- (make-grade 'A 95)
- (make-grade 'D 60)
- (make-grade 'C 79)
- (make-grade 'A 97)
- (make-grade 'A 91)
- (make-grade 'F 48)
- (make-grade 'C 78)))
- (define (bonus log)
- (local [(define (add5 grade)
- (+ 5 (grade-num grade)))
- (define (grade-check num)
- (cond [(> num 89) 'A]
- [(and (> num 79) (< num 90)) 'B]
- [(and (> num 69) (< num 80)) 'C]
- [(and (> num 59) (< num 70)) 'D]
- [else 'F]))
- (define (update grade)
- (make-grade (grade-check (add5 grade))
- (add5 grade)))]
- (map update log)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement