【发布时间】:2014-11-13 02:45:26
【问题描述】:
我在编写方案时遇到了很多麻烦......
我正在尝试使用方案编写快速排序。我看过很多答案,但它们对我来说没有任何意义,这主要是因为我几乎不了解函数式编程。
我已经这样定义了我的支点:
(define (pivot lis)
(car lis))
这很好用(而且很容易编写..)
根据我对分区函数的理解,您拥有原始列表,然后将其拆分为 2 个新列表,一个包含大于枢轴的值,另一个包含小于或等于枢轴的值。
这就是我尝试实现它的方式:
(define (partition lis)
(if (null? lis) '())
(else (lambda (lis1 lis2)
(if (< (car lis) pivot) append lis1)
(partition (append lis2)))))
这是我得到的错误: . else: 不允许作为表达式: (else (lambda (lis1 lis2) (if (
我不太确定如何做到这一点,有什么想法可以做到这一点吗?还是我的推理不对?
【问题讨论】:
-
如错误所说:
else不能单独使用,它必须从cond表达式的最后一个子句开始。