Quais são as principais diferenças entre a correspondência de padrões nesses dois idiomas? Não estou me referindo à sintaxe, mas à capacidade, detalhes de implementação, variedade de casos de uso e necessidade.
Os aplicativos Scala (por exemplo, Lift and Play) falam com orgulho sobre as proezas de correspondência de padrões de idiomas. O Clojure, por outro lado, possui uma biblioteca, core.match, e uma desestruturação integrada, que também parece poderosa.
* note: O motivo de me inspirar a fazer essa pergunta é por causa de um post que vi no qual um programador, como um experimento, construiu um intérprete de Lisp usando Scala e Clojure. Ele disse que as partidas de Clojure se romperam após um certo período, mas não conseguiram explicar o porquê, mas estou realmente curioso para saber. Você pode encontrar esta publicação aqui: http://www.janvsmachine.net/2013/09/writing-simple-lisp-interpreter-in-clojure.html
Respostas:
Em este vídeo eu assisti recentemente, Rich Hickey comenta que ele gosta da parte desestruturação de línguas como o Scala, mas não tanto a parte padrão de correspondência, e ele projetou Clojure em conformidade. Isso provavelmente explica por que a correspondência de padrões está em uma biblioteca e não é tão robusta, embora os tipos de problemas vistos na postagem que você mencionou sejam claramente erros.
O que Rich Hickey menciona como uma alternativa à correspondência de padrões são vários métodos . A maioria dos idiomas permite fazer envios polimórficos com base no tipo. Alguns idiomas permitem que você faça isso com base em um valor. Usando vários métodos, o Clojure permite fazer isso com base em qualquer função arbitrária. Esse é um conceito bastante poderoso.
Tudo se resume ao princípio de que os programadores que usam uma linguagem devem usar os melhores idiomas da própria linguagem. Tentar escrever código semelhante ao Scala no Clojure terá suas dificuldades e vice-versa.
fonte