Hatena::Groupcadr

kozima の日記

2010-08-20

qsort を loop で

| 21:09

http://d.hatena.ne.jp/einblicker/20100820/1282269376 見たら,もっと loop の機能を振り回しつつ書けそうだなって思ったので書いてみた。

(defun qsort (list)
  (if (endp (cdr list))
      list
      (loop with piv = (car list) for i in list
        if (> piv i) collect i into higher
        else if (= piv i) collect i into equal
        else collect i into lower
        finally (return (append (qsort higher) equal (qsort lower))))))

(qsort '(3 1 355 65 432 2))
;=> (1 2 3 65 355 432)

なんだか loop には中毒性があるのかもしれないと思う今日この頃。iter を覚えたいと思いつつも放置しているのです。