Hi Achim, Nice--I like this one, except for needing to apply. What I really want is arity overloading *within* the first argument, which is what led me down the path to multimethods.
Is there a reason to prefer concat over lazy-cat here? Cheers, Stuart > Hi! > > Here's a variadic version: > > (defn qsort > ([] []) > ([x & xs] (concat (apply qsort (filter #(< % x) xs)) > (cons x (apply qsort (filter #(>= % x) xs)))))) > > > user> (qsort 1234 56 789 0) > (0 56 789 1234) > > Kind regards, > achim > > Am 20.10.2008 um 17:16 schrieb Stuart Halloway: > >> >> Hi all, >> >> I seem to recall Rich saying "I like the destructuring part of >> pattern >> matching." In my efforts to appreciate that statement, I am playing >> around with porting simple Haskell examples to Clojure, trying to use >> destructuring (and multimethods) where the Haskell does pattern >> matches. >> >> For example: >> >> -- Haskell >> qsort [] = [] >> qsort (x:xs) = qsort smaller ++ [x] ++ qsort bigger >> where smaller = filter (<x) xs >> bigger = filter (>=x) xs >> >> ; Clojure, destructuring pivot and vals >> (defn quicksort-1 [[pivot & vals]] >> (if pivot >> (let [smaller (partial filter #(< % pivot)) >> bigger (partial filter #(>= % pivot))] >> (lazy-cat (quicksort-1 (smaller vals)) [pivot] (quicksort-1 >> (bigger vals)))) >> nil)) >> >> ; Clojure again, using multimethod to separate base and recur >> (defmulti quicksort-2 first) >> (defmethod quicksort-2 nil [_] nil) >> (defmethod quicksort-2 :default [[pivot & vals]] >> (let [smaller (partial filter #(< % pivot)) >> bigger (partial filter #(>= % pivot))] >> (lazy-cat (quicksort-2 (smaller vals)) [pivot] (quicksort-2 >> (bigger vals))))) >> >> I am confident that the Clojure could be prettier, but not sure how. >> Suggestions? >> >> Cheers, >> Stuart >> >>> > > > > -- > http://rauschabstand.twoday.net > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---