;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defstruct (date
            (:constructor make-date (day month year)))
  (day   1 :type (integer 1 31))
  (month 1 :type (integer 1 12))
  (year  0 :type (integer 0)))

(defmethod print-object ((date date) stream)
  (format stream "~d-~d-~d"
          (date-year date)
          (date-month date)
          (date-day date)))

(print (list (make-date 12 11 2015)
             (make-date 13 01 2044)))


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun foo (&rest args &key m x)
  (print args)
  (print m)
  (print x))
  
(defun bar (m n)
  (foo 'keyword:m :m m n))

(bar :x 42)