(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)))