Débutant - algorithm qsort
Bonjour,
Originaire de c++ j'ai un peu de mal à me retrouver en LISP et fais qqs petits algorithmes pour me lancer. Un simple qsort pas optimal, mais je n'obtiens qu'un stack-overflow:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
(defun qsort (l)
(if (= (length l) 1)
l
(append
(qsort (lowerpart l (pivot l)))
(qsort (upperpart l (pivot l))))))
(defun lowerpart (l r)
(let ((return-value '()))
(dolist (e l)
(if (<= e r)
(push e return-value)))
return-value))
(defun upperpart (l r)
(let ((return-value '()))
(dolist (e l)
(if (> e r)
(push e return-value)))
return-value))
(defun half (l)
(truncate (/ (length l) 2)))
(defun pivot (l)
(nth (half l) l)) |
Je suis preneur de conseils, merci!
PS: sous Emacs CLISP, quand je décide de réinitialiser le thread, je n'arrive plus à relancer la boucle REPL; du coup j'éteins et rallume Emacs, qqn connaît-il une solution plus pratique? Merci encore