AA>обобщенные функции в CLOS наголову выше паттерн-матча, который по сути — те же if-ы.
обобщенные функции в CLOS являются убогим, многословным, жестко прибитым гвоздями говном по сравнению с паттерн-матчингом. Можно начать хотя бы с того, что обобщенные функции, как видно из самого названия, доступны только для объявления функций (весьма кривым способом с парой defgeneric/defmatohd, потому что иначе «самый лучший язык на земле» даже не способен понять, что происходит). Паттерн матчинг в функциональных языках доступен как для объявления функций так и внутри функций.
В итоге в CLOS есть defgeneric/defmethod + куча if'ов внутри. В некоторых других языках есть просто единообразный pattern matching.