4 ms·
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 s
by mnemonik 16y ago
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 16y agoYou can handle your particular case with Clojure's fn argument destructuring. No need for pattern matching.
- mnemonik 16y agoThanks 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 16y agoThat's an actual pattern match. Might as well use matchure ;) (use 'matchure) (defn-match factorial ([0] 1) ([?x] (* x (factorial (dec x)))))
- dcolthorp 16y agoHey mnemonik. I had the same thought. It's in the todo in the readme on github.