Пересмотр подсписка при быстрой сортировке - PullRequest
1 голос
/ 14 декабря 2010

У меня проблемы с выполнением быстрой сортировки в Лиспе.

Моя цель:

Если список содержит 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))) ))

от компилятора.

Я надеюсь, что вы можете помочь. Спасибо.

1 Ответ

1 голос
/ 14 декабря 2010

Почему в LET есть два слоя скобок?

Почему внутри LET отсутствует слой скобок вокруг привязок?

Почему вы звоните (nth i x)? Почему с I?

Почему вы вызываете NTH с одним аргументом, когда он занимает два?

Какая функция APPNED? Там нет функции с этим именем.

(> = x 1) равно (plusp x)

и более ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...