J'ai du mal à faire quicksort en Lisp.regrading sous-liste sur le tri rapide
Mon objectif est:
Si une liste contient l'élément 0 ou 1, est déjà trié. Sinon, triez-le comme suit: obtenez d'abord le pivot, qui est le premier élément de la liste. Maintenant, parcourez le reste de la liste (en utilisant DOLIST), comparez chaque élément avec le pivot. Si un élément est inférieur ou égal au pivot, placez-le dans la sous-liste de gauche, sinon placez-le dans la sous-liste de droite (en utilisant CONS ou APPEND). Puis appelez Qsort pour trier la sous-liste gauche et la sous-liste à droite. Enfin, combinez la sous-liste gauche, le pivot et la sous-liste de droite dans une liste triée. (LET (PIVOT (FIRST X)) (DOLIST (IX PIVOT):
Ceci est mon code:
(defun qsort (x)
(if (>= 1 (length x))
(format t"~%~s is already sorted" x)
((let (pivot (first x))
(dolist (i x)
(if (>= pivot (nth i x))
(list y (nth i))
(list z (nth i))))
(appned y z)))))
mais je semble frapper le mur en obtenant
mal formé lambda (IF (> = PIVOT (NTH IX)) (LISTE PIVOT (NTH I)) (LISTE PIVOT (NTH I)))))
du compilateur.
J'espère que vous pouvez aider. Je vous remercie.