【发布时间】:2016-01-13 03:15:46
【问题描述】:
我设法让我的快速排序功能正常工作,但我很困惑为什么代码的轻微更改会导致该功能表现异常。 这是工作代码:
(defun low (mylist)
(setq result (list))
(loop
for x in mylist
do (if (< x (car mylist))
(setq result (cons x result))))
result)
(defun high (mylist)
(setq result (list))
(loop
for x in mylist
do (if (> x (car mylist))
(setq result (cons x result))))
result)
(defun qsort (mylist)
(if (null mylist)
nil
(progn
;(setq l1 (low mylist))
;(setq l2 (high mylist))
(append (qsort (low mylist))
(list (car mylist))
(qsort (high mylist))))))
但是在qsort 函数中,如果我尝试将分区存储在l1 和l2 中,然后调用qsort,则该函数不再起作用:
(defun qsort (mylist)
(if (null mylist)
nil
(progn
(setq l1 (low mylist))
(setq l2 (high mylist))
(append (qsort l1)
(list (car mylist))
(qsort l2)))))
有了这个(qsort (list -3 5 4 3 1 2)) 返回(-3 1 2)
我知道事先存储分区是没有必要的,但是这有什么不应该起作用的原因吗?
【问题讨论】:
标签: lisp common-lisp quicksort