Просто дополнение, чтобы покрыть мотивацию, ответ Corvuscorax хорошо описывает оригинальный вопрос.
Изначально Clojure имел только мультиметоды и очень рано задумался над созданием абстракции , которая могла бы очень хорошо обрабатывать все случаи и не заставляла бы людей структурировать свои абстракции. вокруг ограничения абстракций, предлагаемых языком.
По мере того, как Clojure созревал, желание создать «clojure in clojure» требовало абстракций, которые, по крайней мере, теоретически способны генерировать любой байт-код, который может быть создан с помощью Java, и, следовательно, необходимы протоколы , абстракция диспетчеризации. что более близко соответствует нативной Java.
Clojure обладает сильным идеалом «охватить вашу платформу», и протоколы очень хорошо подходят для этого мышления.