Racket-按字母升序对字符串列表进行排序

Racket-按字母升序对字符串列表进行排序,racket,Racket,因此,我试图编写自己的排序函数,以字母升序重新排列元素。 例如: (check-expect (sort-list (list "ABD" "ABC" "BCE" "ADE") 0) (list "ABC" "ABD" "ADE" "BCE")) 以下是我目前的情况: (define (sort-list lst n) (cond [(empty? lst) empty] [else (cons (cond

因此,我试图编写自己的排序函数,以字母升序重新排列元素。 例如:

(check-expect (sort-list (list "ABD" "ABC" "BCE" "ADE") 0) 
              (list "ABC" "ABD" "ADE" "BCE"))
以下是我目前的情况:

(define (sort-list lst n)
  (cond
    [(empty? lst) empty]
    [else
     (cons
      (cond
       [(> (substring (first lst) n (+ n 1)) (substring (first (rest lst)) n (+ n 1))) (first (rest lst))]
       [else (sort-list (rest lst) (+ n 1))]))]))

有人能帮我修改代码,使其正常工作吗?

您可以使用插入排序。我将首先使用helper函数insert,其代码如下所示

(define (insert los sorted-los)
  (cond [(empty? sorted-los) (list los)]
        [(string<=? los (first sorted-los))
         (cons los sorted-los)]
        [else (cons (first sorted-los)
                    (insert los (rest sorted-los)))]))
(check-expect (sort-list (list "ABD" "ABC" "BCE" "ADE"))
              (list "ABC" "ABD" "ADE" "BCE"))

(check-expect (sort-list (list "ABF" "ABC" "BCE" "ADE"))
              (list "ABC" "ABF" "ADE" "BCE"))
(check-expect (sort-list (list "ABD" "ABC" "BCE" "EFG"))
              (list "ABC" "ABD" "BCE" "EFG"))

(check-expect (sort-list (list "ABC" "ABC" "BCG" "ADE"))
              (list "ABC" "ABC" "ADE" "BCG"))

为什么将
n
作为
排序列表的参数?那是干什么用的?因为您可以在不使用附加参数的情况下重新排列列表。“(排序列表字符串