Pattern matching in Clojure vs Scala

11

Quali sono le differenze chiave tra la corrispondenza dei pattern in queste due lingue? Non mi riferisco alla sintassi, ma alla capacità, ai dettagli di implementazione, alla gamma di casi d'uso e alla necessità.

Le applicazioni Scala (ad esempio Lift e Play) parlano con orgoglio del modello di corrispondenza delle lingue. Clojure, d'altra parte ha una libreria, core.match, e costruito in destrutturazione, che sembra anche potente.

* nota: Il motivo per cui sono stato ispirato a fare questa domanda è a causa di un post sul blog che ho visto in cui un programmatore, come esperimento, ha costruito un interprete lisp utilizzando sia Scala che Clojure. Ha detto che le partite di Clojure si sono rotte dopo una certa lunghezza, ma non sono riuscito a spiegarne il motivo, ma sono davvero curioso di sapere. Puoi trovare questo post qui: link

    
posta kurofune 25.04.2014 - 18:30
fonte

1 risposta

19

In questo video che ho guardato di recente, Rich Hickey commenta che gli piace la parte destrutturante di linguaggi come Scala, ma non tanto il modello corrispondente alla parte, e ha progettato di conseguenza Clojure. Questo probabilmente spiega perché il pattern matching si trova in una libreria e non è così robusto, anche se il tipo di problemi visti nel post che hai citato sono chiaramente bug.

Ciò che Rich Hickey menziona come alternativa alla corrispondenza del modello è multimethods . La maggior parte delle lingue consente di eseguire la spedizione polimorfica in base al tipo. Alcune lingue ti permettono anche di farlo basandosi su un valore. Usando multimethods, Clojure ti permette di farlo basandosi su qualsiasi funzione arbitraria. Questo è un concetto piuttosto potente.

Si riduce al principio che i programmatori che usano una lingua dovrebbero usare i migliori idiomi della lingua. Provare a scrivere un codice simile a Scala in Clojure avrà le sue difficoltà, e viceversa.

    
risposta data 25.04.2014 - 18:57
fonte