Тема: Сортировка списка
Здравствуйте!
Вопрос по сортировке списка:
У меня создан список. Выглядит он так (часть списка):
[code](((138.75 202.5 0.0) (156.25 202.5 0.0)) ((138.75 170.0 0.0)
(156.25 170.0 0.0)) ((138.75 165.0 0.0) (130.0 165.0 0.0)) ((138.75 137.5 0.0)
(145.0 137.5 0.0)) ((138.75 131.25 0.0) (127.5 131.25 0.0)) ((138.75 105.0 0.0)
(156.25 105.0 0.0)) ((138.75 98.75 0.0) (130.0 98.75 0.0)) ((138.75 72.5 0.0)
(156.25 72.5 0.0)) ((138.75 67.5 0.0) (130.0 67.5 0.0)) ((156.25 255.0 0.0)
(156.25 243.75 0.0)))
[/code]
Т.е. каждый элемент списка состоит из (х1 y1 z1) (x2 y2 z2).
Мне нужно для выполнения следущих задач отсортировать список сначала по х1, потом по х2 и затем по y1. Используя команду vl-sort получается отсортировать только по какой-то одной координате. Результат (по х1 например) получается такой при записи в txt-файл:
[code]93.75 211.25 93.75 205.00
93.75 178.75 93.75 172.50
93.75 146.25 93.75 140.00
100.00 255.00 156.25 255.00
100.00 246.25 155.00 246.25
100.00 232.50 210.00 232.50
105.00 211.25 93.75 211.25
127.50 208.75 127.50 200.00
127.50 167.50 127.50 176.25
130.00 172.50 130.00 170.00
130.00 140.00 130.00 137.50
133.75 220.00 133.75 217.50
133.75 217.50 133.75 213.75
133.75 188.75 133.75 185.00
133.75 185.00 133.75 180.00
133.75 151.25 133.75 148.75[/code]
Я использую следующую функцию:
[code](setq spisokl1 (vl-sort spisokl1
(function (lambda (l1 l2)
(< (caar l1) (caar l2)) ; возрастание координаты х1
;(< (caadr l1) (caadr l2)) ; возрастание координаты x2
;(< (cadar l1) (cadar l2)) ; возрастание координаты y1
);end lambda
);end function
);end vl-sort
);end setq[c/ode]
Если убрать точки с запятой, то сортировка осуществится по у1. Использование функции and, т.е. [code](and (< (caar l1) (caar l2)) (< (caadr l1) (caadr l2)) (< (cadar l1) (cadar l2)))[/code] также не помогает.
Подскажите что можно сделать в данной ситуации. Возможно ли задуманное?