;; What is a century, exactually (may it displease Her Majesty)?
* (loop
for n in '("Julian" "Gregorian" "Mean tropical")
for d in
`(
,(* 100 (+ 365 1/4) 24 3600)

,(* 1/4 (+ (* 400 365) 97) 24 3600)

,(loop
for s = 0 then (* (+ s p) u)
for (p u) in '((365 24) (5 60) (48 60) (45 1))
finally (return (* 100 s))))

do
(format t "~13@A: ~:D s.~%" n d))
Julian: 3,155,760,000 s.
Gregorian: 3,155,695,200 s.
Mean tropical: 3,155,692,500 s.
;; π Gs ≈ 3,141,592,654

Continued.

#ThroughTheLookingGlass

P.S.
I should have calculated the mean tropical year with reduce,
but I only see this now.
🙁

Loop's siren song...

#Calendar
#CalendarCalculation
#CommonLisp
#ComputerProgramming
#Iteration
#Reduce

To wrap this up:

* (defconstant mty '((365 . 24) (5 . 60) (48 . 60) (45 . 1)) "Mean tropical year (days, hours, minutes, seconds).")
MTY
* (loop for s = 0 then (* (+ s p) u) for (p . u) in mty finally (return s))
31556925
* (reduce #'(lambda (s p.u) (* (+ s (car p.u)) (cdr p.u))) `(0 ,@mty))
31556925
* (reduce #'(lambda (s p.u) (* (+ s (car p.u)) (cdr p.u))) mty :initial-value 0) ;¹
31556925
* (= * ** ***)
T

¹ That's the way you do it,
Conses for nothing, all your loops for free.

#CommonLisp