qsortできた

user=> (defn qsort [array]
  (let [value   (first array)
        smaller (for [v array :when (<= v value)] v)
        larger  (for [v array :when (> v value)] v)]
    (when-not (empty? array)
      (into (conj (qsort larger) value ) (reverse (qsort (rest smaller))))
    )
  )
)
#'user/qsort
user=> (qsort [])
nil
user=> (qsort [5 4 3 2 1 9 8 7 6 10])
(1 2 3 4 5 6 7 8 9 10)

と思ったけど、concatってのがある。
intoとかだと、追加する側のリストが分解されて、先頭から
追加される側のリストに追加されるので、追加する側が
自然と逆順になるので、reverseせんと。。。

user=> (defn qsort [array]
  (let [value   (first array)
        smaller (for [v array :when (<= v value)] v)
        larger  (for [v array :when (> v value)] v)]
    (when-not (empty? array)
;      (into (conj (qsort larger) value ) (reverse (qsort (rest smaller))))
      (concat (qsort (rest smaller)) (conj (qsort larger) value ) )
    )
  )
)