|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Offtop:
Дима_, вопрос к Вам не по теме топика, а по искусству программирования, поэтому и оффтопом. Ваш код, пост #13 Строка (cons 10 ((lambda (pt) (list (- (car pt) 200 ) (+ 50 (cadr pt)))) pt)) зачем здесь использовать lambda, а не просто (list (- (car pt) 200 ) (+ 50 (cadr pt))), ведь выше ((lambda (pt) (entmakex ...)) (cdr (assoc 10 (entget ent)))) Вы уже локализовали переменную pt? Или я чего-то непонимаю? Прошу ответить, этот вопрос не ирония Во сказанул: вопрос не по теме топика - масло масленное
__________________
cadtools Последний раз редактировалось TararykovDG, 19.10.2010 в 16:30. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Здесь лишнее, заметил когда выложил и испралять не стал - вначале писал чуть по другому - pt использовалось 2 раза только в той строке, а потом "вытащил" в главную - без нареканий со своей стороны можно заменить на "просто" (list (- (car pt) 200 ) (+ 50 (cadr pt))).
p.s. Тебе зачет за внимательность.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Дима_, спасибо
![]()
__________________
cadtools |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
С чего вы взяли? используя лямбду вы создаете "переменную" Это во первых... Во вторых тогда уж так...
Код:
Последний раз редактировалось gomer, 19.10.2010 в 20:20. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
В языках подразумевающих постоянное использование переменных (бейсик, паскаль) их тип всегда задается явно, либо определяется через имя - для того, чтоб при их изменении не "плыла память", под них сразу отводится ячейки памяти соответствующего размера (кроме строк чуть по другому - схоже с лиспом, но не совсем) - лисп т.н. функциональный язык - то есть состоящий из функций - которые имеют входные и выходные аргументы - подобно математическим (в отличие от других языков где, как правило, функция еще обращается к десятку-другому переменных). В лиспе переменные (те самые которые задаются через / ) аттавизм наподобие goto в паскале. Используя лямбду я, как раз, никаких переменных не создаю поэтому и рекомендую их использовать (лямбды). Если Вы в своей программе используете setq значит "заведомо" теряете функциональность - Вам нужно постоянно отслеживать что хранится в Ваших переменных и можно, либо, нет вызвать какую либо функцию - это давно уже тупиковый путь и никакая большая программа так не работает - в ООП используются "объекты" с "закрытыми" переменными (даже в ассемблере есть локализация и уже по факту полностью отошли от задания аргументов через "общие" регистры). Лисп (при правильном написании) тем и силен, что любую функцию можно вызвать в любой момент времени (рекурсивно?) - я за все время писания на лиспе НИ РАЗУ не использовал отладчик (на ассемблере (а на нем, в свое время, я тоже не мало поработал) я можно сказать только в нем и писал). Еще раз повторю - не должно в лиспе быть переменных (есть ряд исключений связанных с "несовершенством" автолиспа), оно-же как и массивов (был бы автолисп нормально рекурсивным я б с удовольствием сюда еще и циклы добавил - но т.к. хвотовой рекурсии в автолиспе нет - приходиться пользоваться).
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
1. сравнил у меня 18 строк у Вас 23 (да у Вас добавленна "мощная строка" (defun *error* (msg) princ) - то есть если произойдет какая-либо ошибка мы даже не узнаем какая).
2. Код:
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Дима, По нажатии эскейп в кс выпадает *Отмена*, чем не индикатор... + у меня еще и алерт чтоб узер не заснул...
По поводу 2. Согласен с вами.. в этом есть даже некая эстетика... Однако же большое количество лямбд может запутать любого программера, даже автора... так как ломает привычную "узерскую" логику... К тому же при таком подходе в хвосте скапливается большое кол-во "мусора" зы Pastor, аргументируйте ![]() |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Цитата:
Пастор бред - это то что Вам понять не под силу?
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 19.10.2010 в 22:57. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,408
|
Дима_, касательно #25...
Представь себе ситуевину: есть fun1, которая вызывает fun2, передавая ей в качестве параметра указатель на COM-сервер (создается в fun1), указатель на графический примитив, обрабатываемый этим СОМ-сервером, ну и до кучи свойство примитива и значение этого свойства. Все должно работать а) быстро; б) вся занятая память должна быть очищена после выхода из fun1. Одного vlax-release-object недостаточно. Задача: реализовать без применения локальных или глобальных переменных. Скажу честно: я на такое не способен ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,408
|
Дима_, а теперь объясни разницу между переменной и параметром вызова. Особенно когда эта переменная локальная в одной функции и является параметром вызова второй
![]() P.S. Спор, если честно, мне кажется бессмысленным - все равно каждый прав и каждый останется при своем мнении ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
разница в том, что если принципально не подходить к аргументам как к переменным (проще говоря не использовать присваивания), то проблемы с порядком вызова процедур становяться глубоко паралельны - программа не использует ничего кроме входных параметров - а "общается" с другими ТОЛЬКО через выход - не нужно отслеживать "что сейчас в этой переменной", "инициализировал ли я ее и пр" - видим функцию (не важно кем написанную) видим ее входные параметры, а дальше что в ней творится - нам глубоко паралельно - если она протестированна со всеми вариантами входных параметров (имеется в виду диапазон) - то она 100% всегда будет работать - кто-бы и как ее не вызвал. А вот если она в пятой подпрограмме какой-либо "флажок" опрашивает (либо, не дай бог, устанавливает) - искать это можно крайне долго.
п.с. Пусть кто как хочет, так и пишет - полностью согласен. то Gomer такое будет работать долго в отличие от Код:
п.п.п.с твой намек верный - в более "серьезных" версиях лиспа предыдущий бы код работал, но вынеси mapcar в отдельную функцию - закончился бы ошибкой т.к. com там определяется только внутри лямбды и что-бы его увидела другая функция - нужно его явно передать (я поначалу на этом не мало копий наломал - пока не понял что четкое разграничение пространства видимости - это "великое благо" и писать так гораздо удобней и лаконичней (мне по крайней мере)).
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 20.10.2010 в 00:43. |
|||
![]() |
|
||||
Очень странный спор у вас возник...
С одной стороны, без setq, получается код свободный от переменной, хотя с другой стороны, переменная создается внутри безымянной функции и удаляется после завершения. По сути, создание и загрузка дополнительной функции, может занять больше времени, с другой, можно для таких целей сделать постоянную функцию, которая будет выполнять код только при ненулевом аргументе. Для оценки двух подходов, стоит выбрать точку зрения и вектор, который считать верным... - выбирайте: 1. простой и лаконичный код 2. простая и удобная поддержка кода с возможностью его многократно использовать и занести в библиотеку 3. быстрый код 4. крутой код - сложный в понимании основной массой программистов Мое мнение: 1. лучший код в этой теме - первый работающий код, именно он позволил решить задачу просящему помощи и это не зависит от качества, скорости или других свойств программы! 2. Для форума, я обычно использую вариант, в котором меньше всего букв и это не зависит от setq или других функций и подходов. 3. Если уж блистать сутью лиспа, то стоит использовать mapcar и рекурсии, а так же бить код на подпрограммы. Ps. ну вот, теперь огребу ото всех разом... ![]() pps. я бы написал все совсем по другому... ![]()
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ Последний раз редактировалось Елпанов Евгений, 20.10.2010 в 17:28. Причина: add >> pps |
||||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
А что тут думать, логика простая: для всех точек, выбранных юзером, рисуем тексты, содержащие координаты точек соответственно...
Все остальное исправление граблей, на которые будет натыкаться юзер, а не программер... |
|||
![]() |
|
||||
Регистрация: 02.11.2010
Сообщений: 3
|
Ребята, вы извините меня, я тут новичек и меня тоже интересует возможность использования скрипта, который бы выполнял за меня определенную работу - готов оплатить вебмани
![]() ![]() (Описание приложения - фотка 1 - это то как я вижу точки смотря на них сверху до изменения их формата отображения; фотка-2 - это после того, как я поменял формат отображения точек на тот, какой мне нужен; фотка 3 - это конечный вид после того, как ставлю на каждую точку новую точку, чтоб я ее нормально мог видеть и ставлю рядом с ней ее значение по Z) Последний раз редактировалось bem_ua, 02.11.2010 в 11:24. Причина: вставка изображения |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Вобщем,прочитав 4 раза "запрос" я выяснил следующие:
1. нужно чтоб округлялось согласно правилам математики; 2. чтоб прорисовывалась дополнительная точка в "округленном" месте и она была видна в двух проекциях (с переди и с верху) 3. Была возможность регулировки шрифта. Код:
p.s. это пример который показывает недостаток автолиспа - отсутствие т.н. "замыканий" - (то что я имел в виду в #25 под "рядом исключений") - поэтому "приходится" использовать setq - но обращаю внимание это глобальная переменная (без нее настройки не сохранить) локальных по прежнему нет (и надеюсь не будет).
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 02.11.2010 в 16:34. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
как средствами VBA нарисовать дугу, зная координаты центра, радиус, начальную и конечную точки? | tata-tau | Программирование | 9 | 03.03.2010 04:07 |
Нужно узнать координаты каждой точки 3D модели | Babun | AutoCAD | 8 | 14.10.2008 08:38 |
Провести линию параллельно заданной через заданные координаты. | bizon2008 | Программирование | 8 | 02.10.2008 17:23 |
Координаты точки пересечения line и pline (LISP) | paradoxvaha | LISP | 3 | 10.07.2007 13:04 |
Координаты точки, лежащей на полилинии | Al_Taron | Программирование | 1 | 27.11.2006 09:45 |