我在Lisp中做快速排序时遇到了麻烦。
我的目标是:
如果列表包含0或1个元素,则它已经排序。否则按如下方式排序:首先获取pivot,这是列表的第一个元素。现在浏览列表的其余部分(使用DOLIST),将每个元素与pivot进行比较。如果元素小于或等于pivot,则将其放在left-sublist中,否则将其放在right-sublist中(使用CONS或APPEND)。然后调用Qsort对左子列表和右子列表进行排序。最后,将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)))))
然而我似乎已经碰到了
形成不良的lambda :( LET(PIVOT(FIRST X))(DOLIST(IX PIVOT)(IF(> = PIVOT(NTH IX))(LIST PIVOT(NTH I))(LIST PIVOT(NTH I)) )))
来自编译器。
我希望你能提供帮助。谢谢。
答案 0 :(得分:1)
为什么LET周围有两层括号?
为什么绑定周围的LET内部缺少一层圆括号?
你为什么打电话(第n次)?为什么选择我?
为什么用一个参数调用NTH,需要两个?
APPNED有什么功能?没有该名称的功能。
(> = x 1)是(plusp x)
以及更多......