|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
ESC для AutoLISP - "лом, против которого нет приема". А ловушки ошибок действуют наподобие try... except ... end. vl-catch-all-ххх - наилучшая новинка в LISP за последние 10 лет. С их помощью можно предотвратить любую ошибку на любом уровне вложения. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Цитата:
ну это логично. Нажимаешь ты отмену, а тебе программа так ехидно Цитата:
К тому же vl-catch-all-apply по барабану на ошибки command, например, при вставке блока |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Цитата:
Цитата:
|
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
если для вставки блока нужна точка масштаб и угол поворота, то без них блок вставить нельзя, не выдумывать же, это не правильно, более того, vl-catch-all-apply эту ситуацию не отловит, потому что command своя логика, да и вообще она с command работать не хочет, только с лямбдой
для примера (vl-catch-all-apply '(lambda nil (command "_.insert" "d:\\test" pause 1 1 pause))) - ошибка при нажатии еск во время выбора угла поворота ловится (vl-catch-all-apply '(lambda nil (command "_.insert" "d:\\test" pause))) - ошибка при нажатии еск во время выбора угла поворота не ловится (vl-catch-all-apply 'command (list "_.insert" pause "d:\\test" pause 1 1 pause)) - ; ошибка: неверная порядковая функция: COMMAND так что vl-catch-all-apply - не панацея |
|||
![]() |
|
|||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Цитата:
Цитата:
Цитата:
Однако, раз тема про lambda, приведу пример использования как раз в ловушке ошибок. Сначала напишем саму функцию-ловушку. Код:
Как надо вызывать - схема: Код:
Конечно, "простому инженеру" (прикладному программисту), который механизирует свои типовые задачи, наподобие вставок блоков, с этим трудновато разобраться. Для упрощения работы прикладных программистов создаются библиотеки низкоуровневых функций, в которых спрятаны все сложности. А в конкретной программе (функции, конечно), навешиваемой "на кнопку", надо применять простые высокоуровневые функции. Надежные. Чтобы не писали муру наподобие (command "_.insert" "d:\\test" pause 1 1 pause) только потому что так проще. Если уж упомянули блоки, то каждому надо вставлять, например, блоки условных обозначений. Причем надо, чтобы вставка блочишки была многократная, в цикле. Чтобы при этом блок "висел" на курсоре. Чтобы можно было задать поворот или не задавать. Чтобы блок ещё и масштабировался правильно. Чтобы могли быть атрибуты, а могли и не быть. И чтобы это можно было легко применить. Чтобы на уровне меню можно было написать: Сантехнику: (ru-block-insert-from-lib "sanitary\\ru-lib-abok-schem-free-valves-ind" "abok_2_8_05_F-03" 1 1 1 nil)) Топографу: (ru-block-insert-from-lib "land\\ru-lib-topo" "ru_topo_0139" 1 1 1 T)) Строителю: (ru-block-insert-from-lib "common\\ru-lib-common" "number_door_ru" 1 1 1 T)) Здесь применяется библиотечная функция ru-block-insert-from-lib, которая объявлена так (ru-block-insert-from-lib block_lib_name block_name ins_code x_scale y_scale is_angle0) Она делает множественную вставку блока с заданными параметрами из библиотеки блоков. Эту функцию здесь не привожу для экономии места. Она внедряет в чертеж блок из библиотеки, вычисляет масштабы вставки и вызывает низкоуровневую функцию _ru-block-multi-insert-scaled-rotated-or-angleask с подготовленными параметрами. Вот её-то и покажу Код:
|
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Касательно отлова ошибок - в свое время я пришел в выводу, что *error* лучше не переопределять (причины, в частности, рассматривал тут). Особенно при работе в вертикальных приложениях.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Геодезист Регистрация: 16.08.2009
г.Новосибирск
Сообщений: 86
![]() |
Объясните, пожалуйста, как с помощью Lambda получить максимальные и минимальные значения списка, т.е. есть список, например:
Код:
Код:
Код:
|
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Ну с помощью голой лямбда наверное никак, тебе непонятно как алгоритм реализовать, или алгоритм понятен но не получается выразить его через лямбда выражения?
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Геодезист Регистрация: 16.08.2009
г.Новосибирск
Сообщений: 86
![]() |
Большое спасибо за варианты. С последним разобрался, а вот с первым….
gomer, правильно ли я понял первый вариант? Все первые элементы подсписков объединяются в один список Код:
Код:
|
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
да, собственно первый вариант, проистекает из второго в два действия, важно понять, что точка отсчета функции - содание списка (list), просто mapcar это делает неявно, причем шиворот-навыворот
|
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
А при чем тут lambda?
На тему Цитата:
__________________
cadtools |
|||
![]() |
|
||||
Геодезист Регистрация: 16.08.2009
г.Новосибирск
Сообщений: 86
![]() |
|
|||
![]() |
|
||||
а я, для поиска минимального списка использую другую конструкцию:
Код:
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Цитата:
|
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу) | Red Nova | LISP | 5025 | 20.08.2025 22:52 |
Выравнивание полилинии в одну линию. | f0lk | Программирование | 50 | 13.03.2025 14:04 |
Растягивание Mtext по контуру замкнутой области | PlayKid | Программирование | 7 | 27.08.2009 13:41 |
структурированный список | Holon | Программирование | 22 | 11.09.2007 14:09 |