Was sind die Hauptunterschiede zwischen Pattern Matching in diesen beiden Sprachen? Ich beziehe mich nicht auf die Syntax, sondern auf die Fähigkeiten, Implementierungsdetails, Anwendungsfälle und die Notwendigkeit.
Scala-Anwendungen (z. B. Lift and Play) sprechen stolz über die Fähigkeiten des Sprachmustervergleichs. Clojure hingegen verfügt über eine Bibliothek, core.match, und eine integrierte Destrukturierung, die ebenfalls leistungsstark zu sein scheint.
* Anmerkung: Der Grund, warum ich diese Frage gestellt habe, ist ein Blog-Beitrag, in dem ein Programmierer als Experiment einen Lisp-Interpreter mit Scala und Clojure erstellt hat. Er sagte, dass die Clojure-Streichhölzer nach einer gewissen Länge kaputt gingen, konnte aber nicht erklären, warum, aber ich bin wirklich neugierig zu wissen. Sie finden diesen Beitrag hier: http://www.janvsmachine.net/2013/09/writing-simple-lisp-interpreter-in-clojure.html
Antworten:
In diesem Video, das ich kürzlich gesehen habe, bemerkt Rich Hickey, dass er den destrukturierenden Teil von Sprachen wie Scala mag, aber nicht so sehr den Mustervergleichsteil, und er hat Clojure dementsprechend entworfen. Das erklärt wahrscheinlich, warum der Mustervergleich in einer Bibliothek und nicht so robust ist, obwohl die Art der Probleme, die in dem von Ihnen erwähnten Beitrag auftreten, eindeutig Fehler sind.
Was Rich Hickey als Alternative zum Pattern Matching erwähnt, sind Multimethoden . In den meisten Sprachen können Sie polymorphen Versand basierend auf dem Typ durchführen. In einigen Sprachen können Sie dies auch basierend auf einem Wert tun. Mit Clojure können Sie Multimethoden verwenden, die auf einer beliebigen Funktion basieren. Das ist ein ziemlich mächtiges Konzept.
Es kommt auf den Grundsatz an, dass Programmierer, die eine Sprache verwenden, die besten Redewendungen der Sprache verwenden sollten. Der Versuch, Scala-ähnlichen Code in Clojure zu schreiben, wird seine Schwierigkeiten haben und umgekehrt.
quelle