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
-~----------~----~----~----~------~----~------~--~---

Reply via email to