|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
18.04.2019, 16:02 | 1 | | #1 |
Как разобраться с непредсказуемой работой vl-sort?
Разработка
Москва
Регистрация: 18.04.2019
Сообщений: 3
|
||
Просмотров: 2428
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
ИМХО vl-sort удаляет числа, совпадающие с некоторой точностью (скорее всего, до 16 значащих цифр). Правда, я в этом не сильно уверен
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
работа vl-sort предсказуема.
если список составляется из переменных и чисел, vl-sort сортирует список учитывая имена переменныx, если таковые в списке есть и удаляет совпадения. на выходе отсортированный список со значениями переменных. удаляются совпадения атомов, символов, целых чисел, переменных (setq one '(1)) (setq two '(2)) (setq four '(4.0)) (vl-sort (append two two two) '<) -> (2) (vl-sort (append two two two one) '<) -> (1 2) (vl-sort (append four four four two two two one one one one one '(0) '(3.0) '(3.0) '(3.0) four four) '<) -> (0 1 2 3.0 3.0 3.0 4.0) |
||||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,004
|
но нелогична - в других языках просто будут одинаковые элементы идти одной группой в списке друг за другом. А нельзя ли использовать функцию vl-sort-i ?
Цитата:
|
|||
|
||||
Разработка Регистрация: 18.04.2019
Москва
Сообщений: 3
|
Ну да. Отсюда следует, что интерпретатор должен "помнить" каким образом формировался список. Для одинаковых на внешний взгляд, но по-разному сформированных списков после vl-sort будет разный результат. В итоге пришлось подстраховаться функцией с использованием vl-sort-i:
(defun sort-safely (lst comparison-function / ilist sorted i) (setq ilist (vl-sort-i lst comparison-function)) (setq sorted '()) (foreach i ilist (setq sorted (append sorted (list (nth i lst))))) sorted ) |
|||
|
||||
- Регистрация: 24.07.2005
Москва
Сообщений: 1,335
|
Цитата:
Подстраховка через vl-sort-i будет долго работать, т.к. вы делаете небыструю обертку вокруг. Лучше сделать так (сначала привести сортируемые длины к real): Код:
|
|||
|
||||
Цитата:
(vl-sort-i (append four four four two two two one one one one one '(0) '(3.0) '(3.0) '(3.0) four four) '<) (11 10 9 8 7 6 5 4 3 14 13 12 16 15 2 1 0) - сортированные индексы (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16) - оригинальные индексы |
||||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,004
|
ну они хотя бы возвращаются. А если посмотреть на vl-sort:
Цитата:
а для функции сортировки строк acad_strlsort вообще не говориться - как она с дубликатами работает. |
|||
|
||||
|
||||
|
||||
Разработка Регистрация: 18.04.2019
Москва
Сообщений: 3
|
Цитата:
(setq lst (mapcar (function (lambda (a) (* a 1.0))) lst) "Отцепляет" список от того, что его породило. |
|||
|
Опции темы | Поиск в этой теме |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите разобраться с расчетом п/п как элементов висячей системы при прогрессирующем обрушении | AAVik | Железобетонные конструкции | 0 | 09.02.2019 15:13 |
Помогите разобраться с проектированием и согласованием дорог | KretininAS | Автомобильные и железные дороги, мосты, тоннели и организация движения | 19 | 14.08.2012 18:50 |
Помогите разобраться в расчёте металлических ферм в пространственной схеме в SCAD | Stingry | SCAD | 9 | 04.01.2012 14:41 |
Помогите разобраться с конструкцией паровой турбины агрегата ТС-2 | Vladimir757 | Машиностроение | 1 | 06.12.2011 21:49 |