Scheme无限递归

时间:2016-02-09 06:41:50

标签: recursion scheme racket

我正在编写自己的quicksort版本,并且由于某种原因导致无法递归的无限递归。

(define (quicksort-test list)
  (cond
    ((null? list) '())
    (else
     (appending (quicksort-test (less-than-builder list (car list)))
                (quicksort-test (geq-builder list (car list)))))))

Appending是一个辅助函数,它只是将一个列表附加到另一个,而less-than-builder和geq-builder是辅助函数,它们将列表和数据透视作为输入,然后构建一个包含所有内容的列表以及分别大于或等于数据透视表的所有内容的列表。我认为这个问题出现在我的其他声明中,尽管由于某些原因我无法理解为什么,可能是因为油炸大脑。

1 个答案:

答案 0 :(得分:0)

为每个大于或等于数据透视图元素的列表构建列表将永远不会返回空列表,它只会下降到单个元素并不断重复调用自身,因为带有单个元素的列表是总是大于或等于自身。

您需要删除枢轴元素-在(cdr list)上递归-然后将其放回中间。

在评论中,molbdnilo和Eddie V致力于解决此问题