¿Cuáles son las diferencias clave entre la coincidencia de patrones en estos dos idiomas? No me refiero a la sintaxis, sino a la capacidad, los detalles de implementación, el rango de casos de uso y la necesidad.
Las aplicaciones de Scala (p. Ej., Lift and Play) hablan con orgullo sobre la destreza de coincidencia de patrones de idiomas. Clojure, por otro lado, tiene una biblioteca, core.match, y una desestructuración integrada, que también parece poderosa.
* nota: La razón por la que me inspiré para hacer esta pregunta es por una publicación de blog que vi en la que un programador, como experimento, construyó un intérprete de lisp usando Scala y Clojure. Dijo que los partidos de Clojure se rompieron después de una cierta duración, pero no podía explicar por qué, pero tengo mucha curiosidad por saberlo. Puede encontrar esta publicación aquí: http://www.janvsmachine.net/2013/09/writing-simple-lisp-interpreter-in-clojure.html
Respuestas:
En este video que vi recientemente, Rich Hickey comenta que le gusta la parte desestructuradora de lenguajes como Scala, pero no tanto la parte de coincidencia de patrones, y diseñó Clojure en consecuencia. Eso probablemente explica por qué la coincidencia de patrones está en una biblioteca y no es tan robusta, aunque el tipo de problemas vistos en la publicación que mencionó son claramente errores.
Lo que Rich Hickey menciona como una alternativa a la coincidencia de patrones son los métodos múltiples . La mayoría de los idiomas le permiten realizar envíos polimórficos según el tipo. Algunos idiomas también le permiten hacerlo en función de un valor. Usando métodos múltiples, Clojure le permite hacerlo en función de cualquier función arbitraria. Ese es un concepto bastante poderoso.
Todo se reduce al principio de que los programadores que usan un lenguaje deben usar sus mejores expresiones idiomáticas. Intentar escribir código similar a Scala en Clojure tendrá sus dificultades, y viceversa.
fuente