У меня проблемы с выполнением быстрой сортировки в Лиспе.
Моя цель:
Если список содержит 0 или 1 элемент, он уже отсортирован. В противном случае сортируйте его следующим образом: сначала получите пивот, который является первым элементом списка. Теперь просмотрите остальную часть списка (используя DOLIST), сравните каждый элемент с осью. Если элемент меньше или равен центральной точке, поместите его в левый подсписок, в противном случае поместите его в правый подсписок (используя CONS или APPEND). Затем вызовите Qsort для сортировки left-sublist и right-sublist. Наконец, объедините left-sublist, pivot и right-sublist в один отсортированный список.
Это мой код:
(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)))))
все же, кажется, я врезался в стену, получив
Плохо сформированная лямбда: (LET (PIVOT (ПЕРВЫЙ X)) (DOLIST (IX PIVOT) (IF (> = PIVOT (NTH IX)) (LIV PIVOT (NTH I)) (LIV PIVOT (NTH I))) ))
от компилятора.
Я надеюсь, что вы можете помочь. Спасибо.