(defclass лошадиные () ())
(defclass конь (лошадиные) ())
(defclass пегас (лошадиные) ())

(defmethod род ((животина лошадиные))
  (string-downcase (class-name (class-of животина))))

(defmethod заржи ((животина лошадиные))
  (format t "~&~@(~a~): И-ГО-ГО!" (род животина)))

(defmethod взлетай ((животина пегас))
  (format t "~&~@(~a~): Поехали нахуй!" (род животина)))

(defmethod насри ((животина лошадиные))
  (format t "~&*~a кекает*" (род животина)))

(defun зацени (лошадина)
  (format t "~&Гля, какой у меня ~a" (род лошадина))
  (заржи лошадина))

(loop :for род :in '(конь пегас)
      :for приказ :in '(насри взлетай)
      :for животина :=  (make-instance род)
      :do (funcall приказ животина)
      :do (зацени животина))
      
(defmethod отъеби ((ебущий лошадиные) (ебемый лошадиные))
  (format t "~&*~a засадил в ~aиный зад*" (род ебущий) (род ебемый)))
  
(defmethod отъеби :before ((ебущий пегас) (ебемый лошадиные))
  (format t "~&*~a взпорхнув прицелился*" (род ебущий)))

(defmethod отъеби ((ебущий лошадиные) (циферки number))
  (format t "~&~@(~a~): Э-э-э! Я ж тебе не ~a, сам еби ~a" (род ебущий)
          (typecase циферки
            (bit "сишник-байтослесарь")
            (complex "математик")
            (real "физик"))
           циферки))

(let ((пегас (make-instance 'пегас))
      (п-с   (make-instance 'пегас)))
  (dolist (x (list п-с 1 1.2 #c(1 2)))
    (отъеби пегас x)))