Scheme无限递归

问题描述 投票:5回答:1

我正在编写自己的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)))))))

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

recursion scheme racket
1个回答
0
投票

构建一个大于或等于pivot元素的每个元素的列表将永远不会返回一个空列表,它只会到达单个元素并一直反复调用自身,因为具有单个元素的列表总是大于或等于自己。

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

感谢molbdnilo和Eddie V在评论中解决这个问题

© www.soinside.com 2019 - 2024. All rights reserved.