Я хочу отсортировать список по машине каждого элемента, который является минус-ячейкой. Автомобиль каждого элемента — это число, а часть cdr — это слово. Я могу получить список только что отсортированных чисел. Я попытался использовать этот отсортированный список номеров, чтобы отсортировать исходный список. но я действительно не знаю, что делать.
Вот мой код:
(define (sort-by-car-number lst) ;lst is a list with cons-pair
(let ((number-list (sort (map car lst) >))) ;A list of sorted numbers
(cond
((null? lst) number-list)
((equal? (car number-list) (car (car lst)))
(set! (car number-list) (car lst))))
(else (sort-by-car-number (cdr lst))))))
Я хочу, чтобы вывод был таким:
(sort-by-car-number (list '(4 . Blue) '(8 . Black) '(0 . Yellow) '(3 . Green)))
; ==> ((8 . Black) (4 . Blue) (3 . Green) (0 . Yellow))
(insert-by-car-number ...)
, то вы могли бы для каждого элемента вlist1
вставить этот элемент по машине в новый список, который таким образом был бы построен в отсортированном порядке, как(set! new-list (insert-by-car-number element new-list))
. если вы начнете с пустогоnew-list
, он будет упорядочен на каждом этапе по построению. когда вlist1
больше нет элементов,new-list
является его отсортированной версией. это известно как сортировка вставками. - person Will Ness   schedule 05.05.2018