Functional programming 快速排序,理解常见Lisp代码的问题

Functional programming 快速排序,理解常见Lisp代码的问题,functional-programming,lisp,common-lisp,quicksort,Functional Programming,Lisp,Common Lisp,Quicksort,在我的学习中,我需要解释用CommonLisp编程的快速排序的功能。老实说,我真的不知道如何使用CommonLisp。我从互联网上获得了一个代码(对于我的教授来说,可以使用互联网上的代码),它解决了对数字列表排序的问题 我真的不明白这个代码,有人能给我解释一下吗,它具体是做什么的 谢谢你 (defun quick-sort (list) (if (cdr list) (let ((pivot (car list))) (flet ((filter (operator)

在我的学习中,我需要解释用CommonLisp编程的快速排序的功能。老实说,我真的不知道如何使用CommonLisp。我从互联网上获得了一个代码(对于我的教授来说,可以使用互联网上的代码),它解决了对数字列表排序的问题

我真的不明白这个代码,有人能给我解释一下吗,它具体是做什么的

谢谢你

(defun quick-sort (list)
  (if (cdr list)
    (let ((pivot (car list)))
      (flet ((filter (operator)
               (remove-if-not
                 (lambda (n) (funcall operator n pivot))
                 list)))
        (append (quick-sort (filter #'<))
                (filter #'=)
                (quick-sort (filter #'>)))))
    list))
(取消快速排序(列表)
(如果(cdr列表)
(让((枢轴(车辆列表)))
(过滤器(操作员)
(如果没有,请移除。)
(λ(n)(funcall算子n轴))
(列表)
(附加(快速排序(过滤器#');)
(列表)

您是否阅读了快速排序算法的描述,例如在维基百科上?您的意思是您根本不懂Lisp?它的代码是如何构造的,什么是define、let、append、flet、if、remove if not、lambda?如果您了解快速排序算法,即使对任何Lisp方言都知之甚少,也可以直接阅读常见的Lisp代码。如果你不理解算法或语言,你应该在询问之前仔细阅读。请注意,这是因为它缺少就地分区。我不知道如何在不给出答案的情况下扩展一个问题,但如何扩展这段代码以使用一般谓词
&键(pred#'
with
(complete pred)
(和
=
with
\'equal
)导致无限递归。你是否阅读过快速排序算法的描述,例如Wikipedia上的描述?你的意思是你根本不知道Lisp?它的代码是如何构造的,什么是define、let、append、flet、if、remove if not、lambda?如果你理解快速排序算法,即使使用m,也可以直接阅读常见的Lisp代码渴望了解任何lisp方言。如果你不理解算法或语言,你应该在提问之前先阅读。注意,这是因为它缺乏适当的分区。我不知道如何在不给出答案的情况下扩展问题,但如何扩展这段代码以使用通用谓词
&键(pred#’
(补码pred)
(和
#’=
#'相等
)导致无限递归。