Multiple Dispatch
(defmethod add1 ((a fixnum) n) (+ a n))
(defmethod add1 ((a single-float) n) (+ a n))
;; 1.1 million per second
(time (dotimes (i n) (setq *junk* (add1 2 1)))))
(defmethod add2 ((a fixnum) (n fixnum)) (+ a n))
(defmethod add2 ((a single-float) (n single-float)) (+ a n))
;; 625 thousand per second
(time (dotimes (i n) (setq *junk* (add2 2 1)))))