Samozrejme, existuje viacero možných riešení tejto úlohy. Uvádzame tu riešenie založene na usporadúvaní typu bubble-sort.
V hlavnej funkcií budeme rekurzívne volať funkciu realizujúcu 1 cyklus bubble sortu (bubble), až kým sa v poli nebude nič meniť (bude také isté pred aj po prechode funkcie bubble), teda už bude usporiadané.
; Funkcia bubble realizuje v podstate 1 cyklus bubble-sortu so vzostupným
; usporadúvaním. Ak nájde (p1 p2...) také že p1>p2 prehodí ich a pokračuje
; v hľadaní od p1 (p2 ! p1...).
(defun bubble (zoz)
(cond ((null zoz) NIL)
((null (rest zoz)) zoz)
((> (first zoz) (second zoz)) (cons (second zoz) (bubble (cons (first zoz) (rest (rest zoz))))))
(T (cons (first zoz) (bubble (rest zoz))))
)
)
; Príklady:
(bubble '(2 1)) ; -> (1 2)
(bubble '(10 1 7 5 15 0)) ; -> (1 7 5 10 0 15)
; Hlavná funkcia (usporiadajv) volá funkciu bubble, až kým zoznam po jej
; prechode ostane nezmenený, čo znamená, že je usporiadaný.
(defun usporiadajv (zoz)
(cond ((equal zoz (bubble zoz)) zoz)
(T (usporiadajv (bubble zoz)))
)
)
; Príklady:
(usporiadajv '(10 1 7 5 15 0)) ; -> (0 1 5 7 10 15)
(usporiadajv '(7 6 5 4 3 2 1)) ; -> (1 2 3 4 5 6 7)