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:
Je suis preneur de conseils, merci!
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))
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
Partager