球拍插入排序功能,可以按升序或降序排序

时间:2014-11-16 23:58:29

标签: racket insertion-sort

我正在尝试编写一个DrRacket函数,它可以按升序或降序对列表进行排序(通过使比较运算符成为参数)。排序算法应该是插入排序。我调用了第二个参数cmp。

编译时没有警告,但是当我尝试测试函数时;例如,(sort-list '(1 0 2 4) >),我收到此错误:

sort-list: arity mismatch;
the expected number of arguments does not match the given number
expected: 2
given: 1
arguments...:

这是我现在的职能:

(define (sort-list l cmp)
  (define first-element (if (not (null? l)) (car l) 0))
  (cond ((null? l) (quote ()))
        (else (cons (find-shortest l first-element cmp) (sort-list (remove-member l (find-shortest l first-element cmp)))))))

(define find-shortest
    (lambda (tl b cmp)
      (cond ((null? tl) b)
            ((cmp (car tl) b) (set! b (car tl)) (find-shortest (cdr tl) b cmp))
            (else (find-shortest (cdr tl) b cmp)))))

(define remove-member
    (lambda (tl2 a)
      (cond ((null? tl2) (quote ()))
            ((= a (car tl2)) (cdr tl2))
            (else (cons (car tl2) (remove-member (cdr tl2) a))))))

0 个答案:

没有答案