; a partridge in a pear tree

(define gifts '(
  ("first"    "a partridge in a pear tree")
  ("second"   "two turtle doves")
  ("third"    "three french hens")
  ("fourth"   "four calling birds")
  ("fifth"    "five golden rings")
  ("sixth"    "six geese a-laying")
  ("seventh"  "seven swans a-swimming")
  ("eighth"   "eight maids a-milking")
  ("ninth"    "nine ladies dancing")
  ("tenth"    "ten lords a-leaping")
  ("eleventh" "eleven pipers piping")
  ("twelfth"  "twelve drummers drumming")))

(define (christmas)
  (let loop ((gifts gifts) (rev-gifts (list)))
   (when (pair? gifts)
      (display "On the ") (display (caar gifts))
      (display " day of Christmas my true love gave to me ")
      (display (cadar gifts))
      (let rev-loop ((rev-gifts rev-gifts))
        (when (pair? rev-gifts)
          (display (if (< 1 (length rev-gifts)) ", " " and "))
          (display (cadar rev-gifts))
          (rev-loop (cdr rev-gifts))))
      (display ".") (newline)
      (loop (cdr gifts) (cons (car gifts) rev-gifts)))))

(christmas)