next up previous
Next: 9.7 find-if Up: 9 シーケンスデータ Previous: 9.5 remove-ifなど

9.6 sort

Common Lispにはデータの並べ替えを行なう関数sortがあり, シーケンスを扱うことができます.
<cl> (sort '(1 2 3 4) '>)
(4 3 2 1) 
<cl> (sort '#(4 5 3 2 1) '<)
#(1 2 3 4 5) 
<cl> (sort '((1) (2) (3) (4)) '>)
Error: (3) is an illegal argument to <=
[1] <cl> :reset
<cl> (sort '((1) (2) (3) (4)) '> :key 'car)
((4) (3) (2) (1))
たとえば次のような定義が可能.
(defun sort (data pred)
  (cond
   ((null data) nil)
   (t
    (let ((e (car data)) (left nil) (right nil))
      (dolist (x (cdr data))
              (if (funcall pred e x)
                  (setq right (cons x right))
                (setq left (cons x left))))
      (append (sort left pred)
              (list e)
              (sort right pred))))))


generated through LaTeX2HTML. M.Inaba 平成18年5月7日