PasteRack.org
Paste # 58948
2025-10-23 00:15:10

Fork as a new paste.

Paste viewed 418 times.


Embed:

an enumeration of cal poly terms

  1. #lang racket
  2.  
  3. (require data/enumerate
  4.          data/enumerate/lib)
  5.  
  6. ;; convert a number to a term pair
  7. (define (enum-n->term n)
  8.   (from-nat term/e n))
  9.  
  10. ;; convert a term pair to a number
  11. (define (enum-term->n term)
  12.   (to-nat term/e term))
  13.  
  14.  
  15. ;; WE ARE DISALLOWING YEARS BEFORE THE BIRTH OF CHRIST.
  16.  
  17. (define qtr-season/e (fin/e "Winter" "Spring" "Summer" "Fall"))
  18. (define sem-season/e (fin/e "Spring" "Summer" "Fall"))
  19.  
  20. ;; an enumeration of the quarters; all pairs of year/qtr-season
  21. ;; where year is below 2027, except for 2026 summer and fall.
  22. (define qtr/e
  23.   (except/e
  24.    (list/e (below/e 2027) qtr-season/e)
  25.    '(2026 "Summer")
  26.    '(2026 "Fall")))
  27.  
  28. ;; an enumeration of the semesters; all pairs of year/sem-season
  29. ;; where year is >= 2026, except for 2026 Spring:
  30. (define sem/e
  31.   (except/e
  32.    (list/e (nat+/e 2026) sem-season/e)
  33.    '(2026 "Spring")))
  34.  
  35. ;; I'm responsible for ensuring that the elements here don't overlap.
  36. ;; yep, can confirm. It's up to me.
  37.  
  38. ;; staple together qtr/e and sem/e to make term/e
  39. (define term/e
  40.   (append/e qtr/e sem/e))
  41.  
  42. ;; let's run it. make sure these are sequential!
  43. (enum-term->n '(2026 "Spring"))
  44. (enum-term->n '(2026 "Summer"))
  45.  

=>

8105

8106