【发布时间】:2010-12-14 17:41:17
【问题描述】:
我无法在 Lisp 中进行快速排序。
我的目标是:
如果列表包含 0 或 1 个元素,则它已经排序。否则按如下方式排序:首先获取枢轴,它是列表的第一个元素。现在遍历列表的其余部分(通过使用 DOLIST),将每个元素与枢轴进行比较。如果元素小于或等于枢轴,则将其放入左子列表,否则将其放入右子列表(通过使用 CONS 或 APPEND)。然后调用Qsort对left-sublist和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)))))
但我似乎碰壁了
格式错误的 lambda: (LET (PIVOT (FIRST X)) (DOLIST (I X PIVOT) (IF (>= PIVOT (NTH I X)) (LIST PIVOT (NTH I)) (LIST PIVOT (NTH I))) ))
来自编译器。
希望你能帮上忙。谢谢。
【问题讨论】:
标签: lisp