; tomohiko sakamoto's day-of-week algorithm

(define (day-of-week year month day)
  (let ((t '#(0 3 2 5 0 3 5 1 4 6 2 4))
        (year (if (< month 3) (- year 1) year)))
    (vector-ref '#(Sun Mon Tue Wed Thu Fri Sat)
      (modulo (+ year (quotient year 4)
        (- (quotient year 100)) (quotient year 400)
        (vector-ref t (- month 1)) day) 7))))

(display (day-of-week 2016 2 28)) (newline)
(display (day-of-week 2016 2 29)) (newline)
(display (day-of-week 2016 3 1))  (newline)
(display (day-of-week 2016 6 17)) (newline)