Quelles sont les principales différences entre la correspondance de motifs dans ces deux langues? Je ne fais pas référence à la syntaxe, mais à la capacité, aux détails d'implémentation, à la gamme de cas d'utilisation et à la nécessité.
Les applications Scala (par exemple, Lift and Play) parlent fièrement des prouesses de correspondance des modèles de langues. Clojure, quant à lui, dispose d'une bibliothèque, core.match, et d'une déstructuration intégrée, qui semble également puissante.
* note: La raison pour laquelle j'ai été inspiré de poser cette question est à cause d'un article de blog que j'ai vu dans lequel un programmeur, à titre d'expérience, a construit un interprète lisp en utilisant à la fois Scala et Clojure. Il a dit que les matchs de Clojure avaient éclaté après une certaine durée, mais ne pouvaient pas expliquer pourquoi, mais je suis vraiment curieux de savoir. Vous pouvez trouver cet article ici: http://www.janvsmachine.net/2013/09/writing-simple-lisp-interpreter-in-clojure.html
Réponses:
Dans cette vidéo que j'ai regardée récemment, Rich Hickey commente qu'il aime la partie destructrice de langages comme Scala, mais pas tellement la partie de correspondance de motifs, et il a conçu Clojure en conséquence. Cela explique probablement pourquoi la correspondance de modèles est dans une bibliothèque et n'est pas aussi robuste, bien que le type de problèmes rencontrés dans le message que vous avez mentionné soit clairement des bogues.
Ce que Rich Hickey mentionne comme alternative à la correspondance de motifs, ce sont les multiméthodes . La plupart des langues vous permettent d'effectuer une répartition polymorphe en fonction du type. Certaines langues vous permettent également de le faire en fonction d'une valeur. À l'aide de plusieurs méthodes, Clojure vous permet de le faire en fonction de n'importe quelle fonction arbitraire. C'est un concept assez puissant.
Cela revient au principe que les programmeurs utilisant un langage devraient utiliser les meilleurs idiomes du langage. Essayer d'écrire du code de type Scala dans Clojure va avoir ses difficultés, et vice versa.
la source