On Oct 20, 2008, at 11:16 AM, Stuart Halloway wrote:
> 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
>
> [...]
> I am confident that the Clojure could be prettier, but not sure how.
> Suggestions?
Here are a couple of ideas:
The first is a more literal translation of the Haskell code with 'when
providing the nil case:
(defn quicksort-3 [[x & xs]]
(when x
(let [smaller (filter #(< % x) xs)
bigger (filter #(>= % x) xs)]
(lazy-cat (quicksort-3 smaller)
[x]
(quicksort-3 bigger)))))
The second uses the filter/remove complementary pair so there's only
one predicate:
(defn quicksort-4 [[x & xs]]
(when x
(let [smaller #(< % x)]
(lazy-cat (quicksort-4 (filter smaller xs))
[x]
(quicksort-4 (remove smaller xs))))))
--Steve
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To post to this group, send email to [email protected]
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
-~----------~----~----~----~------~----~------~--~---