Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

What are the key differences between pattern matching in these two languages? I am not referring to syntax, but capability, implementation details, range of use cases and necessity.

Scala applications (eg. Lift and Play) speak proudly about the languages pattern matching prowess. Clojure, on the other hand has a library, core.match, and built in destructuring, which also seems powerful.

*note: The reason I was inspired to ask this question is because of a blog post I saw in which a programmer, as an experiment, built a lisp interpreter using both Scala and Clojure. He said that the Clojure matches broke after a certain length, but could not explain why, but I am really curious to know. You can find this post here: http://www.janvsmachine.net/2013/09/writing-simple-lisp-interpreter-in-clojure.html

share|improve this question
3  
@gnat The blog post seems really incidental. It seems to me he doesn't really care about an explanation to the blog per se, just a comparison of how a particular language feature differs across two specific languages. Isn't that objectively answerable? –  Doval Apr 25 at 16:56
3  
In defense of this question: it's objective, well-written, and clear. Why does it matter that the OP read a blog before posting this question? That doesn't change the quality of the question. –  Matt Fenwick Apr 25 at 16:56
1  
This isn't Gorilla vs. Shark because he's asking for very specific information on one very specific feature that is common to both languages, even if it might be implemented differently in both. This is a much more focused question than Gorilla vs. Shark. –  Evicatos Apr 25 at 17:01
1  
Agreed. Gorilla vs. Shark is about comparing two things that are incomparable, like apples and oranges. Comparing the implementations of a feature in two languages is not Gorilla vs. Shark. It's specific, it's relevant, and the kind of question that experts are interested in. It's not just a "help me choose a language" question. –  Karl Bielefeldt Apr 25 at 17:02
1  
The reason I mentioned the blog was to round out your understanding of what motivated me to ask the question. I thought it would be a good footnote to to my actual question. I explained some so you wouldn't need to read it yourself, but included a link in case you did. I thought the * and "note:" made that pretty clear, but I guess I should have added some parentheses and a line of dashes, too. PS: sharks. –  kurofune Apr 25 at 17:08

1 Answer 1

up vote 7 down vote accepted

In this video I watched recently, Rich Hickey comments that he likes the destructuring part of languages like Scala, but not so much the pattern matching part, and he designed Clojure accordingly. That probably explains why the pattern matching is in a library and not as robust, although the kind of problems seen in the post you mentioned are clearly bugs.

What Rich Hickey mentions as an alternative to pattern matching is multimethods. Most languages let you do polymorphic dispatch based on type. Some languages let you also do it based on a value. Using multimethods, Clojure lets you do it based on any arbitrary function. That's a pretty powerful concept.

It comes down to the principle that programmers using a language should use the language's own best idioms. Trying to write Scala-like code in Clojure is going to have its difficulties, and vice versa.

share|improve this answer
    
Thank you for a very interesting answer to my question. I never thought about multi-methods in that way! It seems it would be overkill for simple tasks but definitely powerful. I agree with what you said about idiom too. I can't wait to get the hang of that in Clojure :) –  kurofune Apr 25 at 17:22

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.