Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.85 KB | None | 0 0
  1. ;; A Grade is: (make-grade Symbol Number)
  2. (define-struct grade (letter num))
  3.  
  4. ;; The Symbol in a Grade represents
  5.  
  6. ;; 'A >= 90
  7. ;; 'B >= 80
  8. ;; 'C >= 70
  9. ;; 'D >= 60
  10. ;; 'F < 60
  11.  
  12. ;; A [Listof Grades] ...
  13. (define grades
  14. (list (make-grade 'D 62) (make-grade 'C 79) (make-grade 'A 93) (make-grade 'B 84)
  15. (make-grade 'F 57) (make-grade 'F 38) (make-grade 'A 90) (make-grade 'A 95)
  16. (make-grade 'C 76) (make-grade 'A 90) (make-grade 'F 55) (make-grade 'C 74)
  17. (make-grade 'A 92) (make-grade 'B 86) (make-grade 'F 43) (make-grade 'C 73)))
  18.  
  19. ;; A1.1
  20. (check-expect (log->lon grades)
  21. (list 62 79 93 84 57 38 90 95 76 90 55 74 92 86 43 73))
  22. (define (log->lon log)
  23. (local [(define (grade->number grade)
  24. (grade-num grade))]
  25. (map grade->number log)))
  26.  
  27. ;; A1.2
  28. (check-expect (best-grade grades) (make-grade 'A 95))
  29. (define (best-grade log)
  30. (local [(define (higher-grade grade1 grade2)
  31. (cond [(> (grade-num grade1)
  32. (grade-num grade2)) grade1]
  33. [else grade2]))]
  34. (foldr higher-grade (first log) log)))
  35.  
  36. ;; A1.3
  37. (check-expect (just-As grades) (list
  38. (make-grade 'A 93)
  39. (make-grade 'A 90)
  40. (make-grade 'A 95)
  41. (make-grade 'A 90)
  42. (make-grade 'A 92)))
  43.  
  44. (define (just-As log)
  45. (local [(define (check-a grade)
  46. (symbol=? (grade-letter grade) 'A))]
  47. (filter check-a log)))
  48.  
  49. ;; A1.4
  50. (check-expect (all-pass? grades) false)
  51. (define (all-pass? log)
  52. (local [(define (check-f grade)
  53. (not (symbol=? (grade-letter grade) 'F)))]
  54. (andmap check-f log)))
  55.  
  56. ;; A1.5
  57. (check-expect (bonus grades)
  58. (list
  59. (make-grade 'D 67)
  60. (make-grade 'B 84)
  61. (make-grade 'A 98)
  62. (make-grade 'B 89)
  63. (make-grade 'D 62)
  64. (make-grade 'F 43)
  65. (make-grade 'A 95)
  66. (make-grade 'A 100)
  67. (make-grade 'B 81)
  68. (make-grade 'A 95)
  69. (make-grade 'D 60)
  70. (make-grade 'C 79)
  71. (make-grade 'A 97)
  72. (make-grade 'A 91)
  73. (make-grade 'F 48)
  74. (make-grade 'C 78)))
  75. (define (bonus log)
  76. (local [(define (add5 grade)
  77. (+ 5 (grade-num grade)))
  78. (define (grade-check num)
  79. (cond [(> num 89) 'A]
  80. [(and (> num 79) (< num 90)) 'B]
  81. [(and (> num 69) (< num 80)) 'C]
  82. [(and (> num 59) (< num 70)) 'D]
  83. [else 'F]))
  84. (define (update grade)
  85. (make-grade (grade-check (add5 grade))
  86. (add5 grade)))]
  87. (map update log)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement