

Matchure: Serious Clojure Pattern Matching - atomicobject
http://spin.atomicobject.com/2010/04/25/matchure-serious-clojure-pattern-matching?utm_source=social-media&utm_medium=social-media&utm_campaign=social-media

======
mnemonik
Maybe I missed this from the article, but it would be really cool if someone
would mash this pattern matching up in a macro with defn (maybe called "?defn"
or something) so you could do stuff like the following without relying on
apply:

    
    
        (defn qsort
          ([] '())
          ([Head & Tail] (let [lower (filter #(< % Head) Tail)
                               upper (filter #(>= % Head) Tail)]
                           (concat (apply qsort lower) (list Head) (apply qsort upper)))))
    

I have barely played around with Clojure though, so if there is a nicer way to
express that code, please drop a comment and try not to tear me to pieces. My
point is that I would love to have pattern matching available in function
definitions similar to Haskell/Erlang.

~~~
swannodette
You can handle your particular case with Clojure's fn argument destructuring.
No need for pattern matching.

~~~
mnemonik
Thanks for the info, didn't know you could do that! What about the classic
factorial, though?

    
    
      (defn factorial
        ([0] 1)
        ([x] (* x (factorial (- x 1)))))

~~~
swannodette
That's an actual pattern match. Might as well use matchure ;)

    
    
      (use 'matchure)
      (defn-match factorial
        ([0] 1)
        ([?x] (* x (factorial (dec x)))))

------
floater
Duplicate: <http://news.ycombinator.com/item?id=1293600>.

