我在Lisp中做快速排序时遇到了麻烦。在快速排序上重新调整子列表
我的目标是:
如果列表中包含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(FIRST X))(DOLIST(IX PIVOT) (IF(> = PIVOT(NTH IX))(LIST PIVOT(NTH I))(LIST PIVOT(NTH I)))))
来自编译器。
我希望你能帮上忙。谢谢。