Вы можете использовать сортировку вставок. Сначала я использовал бы вспомогательную функцию 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)))]))
Затем я бы определил основную функцию следующим образом: (define (sort-list los) (cond [(empty? Los))пусто] [else (insert (first los) (sort-list (rest los)))))).
Вам не нужен дополнительный параметр n
, и вам не нужно использовать толькоодна функция, хотя вы могли бы определить функцию вставки внутри функции sort, используя тоже local.
Код также удовлетворяет некоторым тестам, как показано ниже.
(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"))