|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
1. Зачем вы создали l_f да еще таким извращенным способом (если она и нужна - можно было через defun).
2. ИХМО vl-remove nil идеологически не правильно (потом так-же будешь обрабатывать списки в которых изначально есть nil - забудешь на 300%), то есть вначале фильрация, потом преобразование (в других лиспах есть дефолтные конструкции делающие это одновременно - но ничего не мешает сделать их для себя в автолиспе) - (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget (car (entsel))))) 3. У тебя возращает не точку, а список значений по оси X. 4. В полилинии (и не только) полученную точку надо еще преобразовать в мировую систему (попробуй свой лисп на полилинии не в плоскости "сверху") - см. функцию (trans...
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 28.07.2008
Мурманск
Сообщений: 208
![]() |
Про фильтрацию впитал. Лисп в посте #20 подправил.
А почему способ извращенный? Дальше этой переменной присваиваются значения. Собственно, в нее уходит список с координатами. А этот код можно сделать проще Код:
Это уже для 2д/3д полилиний Сорри за угребищное описание rec. Она большая и к ней не очень удобно обращаться по описанию. Последний раз редактировалось Kirill_Ja, 27.11.2012 в 16:40. |
|||
![]() |
|
||||
В первую очередь извиняюсь - я не смог заставить себя прочесть всю ветку.
теперь по теме: для многократного использования кода, имеет смысл создать специальную функцию, которая будет выполнять действие, например: многократное выполнение a + b*2 можно написать программу: Код:
Код:
Но вернемся к lambda функциям. Допустим нам необходимо много раз выполнить подобную функцию, но только для одного списка. Получается определение самостоятельной функции избыточно. На такой случай, есть возможность создания временной функции, которая будет существовать только в рамках используемого места. Для временной функции не будет создаваться имя и как следствие ее нельзя вызвать еще раз. (обычным образом, но обо всем по порядку ![]() для нашего примера, можно создать вариант с временной функцией: Код:
пришло время рассказать о списках - именно здесь и кроется все удобство использования lambda: используем функцию F для обработки списков. Код:
В общем случае, использование в mapcar именованных функций, определенных подобно F, очень удобно. Но в случае, когда для каждого mapcar придется писать собственную функцию со своим определением, поддержка такого кода получается не самой удобной. В одном месте создается функция для обработки списка, а совершенно в другом происходит сама обработка. Для таких случаев и создана lambda. Например: Код:
ps. как и обещал, поясню о сохранении функции lambda. никто не запрещает сохранить саму lambda функцию в переменную для многократного использования: Код:
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Если смотреть с точки зрения лиспа, то тут немного верх ногами - defun - это такая обертка сохраняющая функции в текущей области видимости (что в общем-то не всегда нужно).
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Цитата:
![]() Код:
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
nil и '() - это синонимы (можно в любом месте поменять одно на другое - результат не изменится), просто в автолиспе нет как такогого булевского типа (то есть есть, но совмещенно-половинчатый) T или любое значение кроме nil (или '()) и собственно nil - который "по совместительству" пустой список. Кое-где это приносит выгоду:
Код:
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Цитата:
Код:
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
ИМХО далеко не обязательно
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Ну это простой слишком пример
![]() Вот тут уже не так просто: Код:
|
||||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
переняся initget на строчку выше, приходим к исходной конструкции
![]() а насчет каскадов ловушек с лямбдами, лучше написать свой нормальный *error* Последний раз редактировалось gomer, 27.12.2012 в 17:48. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Научите лиспу на примере (или как 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 |