Вы можете использовать процедуру sort
, передавая в качестве параметров список позиций и процедуру сравнения:
(define (posn-sort lst)
(sort lst compare-posn))
Конечно, уловка заключается в том, чтобы написать правильный компаратор.Он получает в качестве параметров две позиции, и возвращает :
истинное значение, если первое меньше (т.е. должно быть отсортировано раньше), чем второе.
Для вашего случая это означает, что сначала мы должны сравнить x
значения двух позиций, если это сравнение false
, то мы сравниваем y
значения.Сама процедура пишет:
(define (compare-posn p1 p2)
(or (< (posn-x p1) (posn-x p2))
(< (posn-y p1) (posn-y p2))))