2010-12-13 58 views
1

我在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)))))

来自编译器。

我希望你能帮上忙。谢谢。

回答

1

为什么LET周围有两层括号?

为什么在绑定周围的LET中缺少一层圆括号?

为什么你打电话给我(第i我)?为什么与我?

为什么你用一个参数调用NTH,当它需要两个?

APPNED有什么功能?这个名字没有功能。

(> =×1)是(plusp X)

更多...