Совершенно не связано.
Scala - статически типизированный язык. Clojure - это динамически типизированный язык. Это различие фундаментально формирует их обоих.
Структурные типы - это статические типы, точка. Это просто способ заставить статически доказать компилятору, что объект будет иметь определенную структуру (я говорю «докажи здесь», но приведение может вызвать ложные доказательства, как всегда).
Протоколы в Clojure - это способ создания динамической отправки, которая намного быстрее, чем отражение или поиск объектов на карте. В семантическом смысле они на самом деле не расширяют возможности Clojure, но в оперативном отношении они значительно быстрее, чем механизмы, которые использовались ранее.
Черты Scala немного ближе к протоколам, как и интерфейсы Java, но, опять же, существует проблема статики и динамики. Черты Scala должны быть связаны с классом во время компиляции, подобно интерфейсам Java. Протоколы Clojure могут быть добавлены к типу данных во время выполнения даже после того, как это произошло третьей стороной.
Нечто подобное протоколам Clojure возможно в Java и Scala с помощью таких механизмов, как шаблоны оболочки / прокси или динамические прокси (http://download.oracle.com/javase/1.4.2/docs/guide/reflection/proxy.html). Но они будут чертовски неуклюжими по сравнению с протоколами Clojure, и получить правильную идентификацию объекта также сложно.