【问题标题】:regrading sublist on quick sort重新排序快速排序的子列表
【发布时间】: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


    【解决方案1】:

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

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

    你为什么叫 (nth i x) ?为什么用 i?

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

    APPNED 是什么功能?没有那个名字的功能。

    (>= x 1) 是 (plusp x)

    还有更多...

    【讨论】:

      猜你喜欢
      • 2021-07-14
      • 2016-12-02
      • 1970-01-01
      • 2016-12-23
      • 2014-10-10
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多