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 : Sélectionner tout - Visualiser dans une fenêtre à part
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