Thanks, everyone, for your continued feedback. Here is the latest revision.
(defun read-side (side) (format t "Enter a value for side ~d: ~%" side) (read))
(defun triangle-p (a b c) (and (< a (+ b c)) (< b (+ a c)) (< c (+ a b))))
(defun equilateral-p (a b c) (= a b c))
(defun isoceles-p (a b c) (or (= a b) (= b c)))
(defun right-triangle-p (a b c)
(destructuring-bind (long-side short-side-1 short-side-2) (sort (list a b c) #'>)
(= (expt long-side 2) (+ (expt short-side-1 2) (expt short-side-2 2)))))
(defun status-message (message a b c) (format t "The shape ~d,~d,~d ~a ~%" a b c message))
(defun classify-triangle (a b c)
(cond ((not (triangle-p a b c)) nil)
((right-triangle-p a b c) 'right)
((equilateral-p a b c) 'equilateral)
((isoceles-p a b c) 'isoceles)
(t 'triangle)))
(let* ((a (read-side 1)) (b (read-side 2)) (c (read-side 3))
(triangle-type (classify-triangle a b c))
(article (if (member triangle-type '(isoceles equilateral)) "an" "a"))
(tri-name (if (eq triangle-type 'triangle) "non-right, non-isoceles, non-equilateral" triangle-type)))
(format t "The shape (~d, ~d, ~d) is ~:[not a triangle~;~a ~(~a~) triangle~]." a b c triangle-type article tri-name))