The purpose of Protocols in Clojure is to solve the Expression Problem in an efficient manner. So, what's the Expression Problem? It refers to the basic problem of extensibility: our programs manipulate data types using operations. As our programs evolve, we need to extend them with new data types and new operations. And particularly, we want to be able to add new operations which work with the ex
