|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
28.11.2007, 22:50 | #1 | |
DwgRuLispLib: Преобразование значения в строку
Moderator
LISP, C# (ACAD 200[9,12,13,14])
С.-Петербург
Регистрация: 25.08.2003
Сообщений: 39,854
|
||
Просмотров: 27552
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,854
|
Теоретически вариант с проверкой на 'str должен работать быстрее, но практически прирост скорости минимален: с проверкой на str выдает 1610 миллисекунд на выполнение, без проверки - 1656 миллисекунд. Код поменяю. Единственное "но" - к вечеру поближе.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Еще есть предложения для типа real возвращать максимальное количество знаков. Я руководствуюсь тем, что результат _dwgru-conv-value-to-string в строковом виде должен максимально соответствовать оригиналу.
Код:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,854
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Проверить не на чем, но думаю на том же - интерпретатор ЛИСП, врядли переделают уж очень радикально. Но, в принципе, никто не запрещает сделать и (rtos value 2 64) - оно не сломается
|
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
По поводу 12, 15, 64 или что-то еще. Наверное, это должно быть максимальное значение, ограниченное здравым смыслом
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Здравый смысл, во всех отношения замечательная штука, кроме одного "НО" - он контекстнозависим... Поскольку функция претендует на унивесальность, то ориентироваться надо бы только на технические возможности, так считаю.
|
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Кстати, насчет здравого смысла и технических возможностей примерчик
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Мне кажется, функцию конвертирования надо оставлять "как есть". Что vl-princ-to-string для числа вернет, то и вернет функция.
А форматирование "строковых" чисел делать отдельной функцией. Там тоже может быть много вариантов (лидирующие и завершающие нули, символ десятичной точки). Не надо стремиться всё в одно место загнать. Мне даже rtos пришлось заменять. |
|||
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Интересное наблюдение - получается, что преобразование rtos производит с бОльшей точностью, чем отображает.
Но, если единственным отличием библиотечной функции от встроенной будет возврат пустой сторки, при отсутствии содержательного значения, то не проще будет прямо в тексте программы набрать: (if value (vl-princ-to-string value) ""), чем искать библиотечную? Потребность именно в такой трактовке nil не выглядит высокой. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
>Alaspher
+1
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,854
|
То есть, я так понимаю, такая "функция" нафиг не требуется. Зер гуд
P.S. А вот вариант "замены rtos" посмотреть было бы любопытно...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Не правильно понимаете. Такая функция "нафиг" требуется. Речь просто о том, данные на входе и выходе должны совпадать. Только на выходе - строка.
Вызывая функцию (_DWGRU-CONV-VALUE-TO-STRING 'ABCD) я вправе ожидать на выходе "ABCD", а не "ABC" Это же справедливо и для (_DWGRU-CONV-VALUE-TO-STRING 1.111222333444555). На выходе должно быть не "1.11122" как сейчас, а "1.111222333444555". Понятно, что в представлении и обработке вещественных чисел есть нюансы. Но это нюансы надо максимально приблизить к оригиналу c учетом ограничений Автокада. Поэтому и предлагаю для real внести строчку ((= (type value) 'real)(rtos value 2 15)) Назначение такой ф-ции вижу как "Гарантированно возвращать строку, максимально похожую на оригинал"
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Цитата:
Но подобная функция могла бы быть полезной, если добавить в аргументы значение по умолчанию если value NIL. Для этого варианта умолчанием мог бы быть и NIL, и пустая строка, и что-то еще в зависимости от контекста вызова. Насчет разрядности возврата значений для real всё-таки предлагаю это в отдельную функцию. Почему, например, именно 15 знаков? А если надо не 1.11122 и не 1.111222333444555, а 1.11122300000? Или 0001.11000 |
|||
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Так вот она и есть, эта отдельная функция. А если и делать копию rtos, то только ради того, чтобы иметь легкоуправляемый возврат хвостовых нулей. Других задач я не вижу.
|
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Цитата:
Но сейчас, в AutoCAD 2008, rtos возвращает правильный результат. Чувствую себя идиотом |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,854
|
Могу обрадовать - на 2008 сидят далеко не все
(в сторону): Интересно, а кем мне тогда себя чувствовать, когда в 2002 при попытке записать ldata на блок *Model_space* вываливалась ошибка, а в 2005 это нормально работало?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
DwgRuLispLib: Преобразование указателя на примитив в vla | Кулик Алексей aka kpblc | Библиотека функций | 5 | 27.12.2007 13:47 |
DwgRuLispLib: Преобразование указателя на примитив в ename | Кулик Алексей aka kpblc | Библиотека функций | 1 | 27.12.2007 13:30 |
DwgRuLispLib: Преобразование variant или safearray в список | Кулик Алексей aka kpblc | Библиотека функций | 24 | 30.11.2007 18:53 |
задание атрибуту значения имени файла | Паша Горбунов | AutoCAD | 5 | 21.10.2005 19:06 |