|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Евгению:
Вот что меня меньше всего "парит" - так это потеря производительности от рекурсии. При использовании рекурсий я смотрю только на отстуствие хвостовой оптимизации (влезает ли в стек предпологаемое множество итераций) - к сожалению есть такой недостаток автолиспа. Я убежден, что если дать одну и ту же более-менее сложную общую задачу 2 отдельным программистам и попросить одного писать в функциональном стиле, а другого в императивном, то их производительность будет в среднем одинакова (а реализации алгоритмов несколько отличатся - каждый с уклоном в "свою" сторону). Да если переписать готовую "функционально-рекурсивную" программу в императивном стиле - выйгрыш будет (на самом деле лиспы посерьезней делают это автоматически - и упомянутая хвостовая оптимизация тому пример), но он будет не значителен, программа потеряет "лекгость изменений" и самое главное изначально в императивном стиле ее так не напишешь (я точно не напишу) т.к. логика подходов все-таки разная. p.s. - на производительность автолиспа я смотрю так, либо задача решатся - нажал-результат, либо надо серьезно задуматся - тот-ли инструмент используется т.к. выйгрыш от использование итераций лежит в пределах нескольких процентов - то для юзера абсолютно все равно 0.1 или 0.12 секунды ушло на обработку данных. А если задача требует серьезных вычислений и должна производится быстро - тут стоит посмотреть в первую очередь на алгоритм, а если с ним уже ничего не сделать - то в сторону инструментов действительно убыстряющих процесс вычислений в разы - dll(Net), либо отдельный EXE.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Цитата:
А для разных масок в приличном редакторе можно установить и разные цвета. Например, у меня свои функции имеют одну раскраску, функции от kpblc - другую. Различаются "низкоуровневые" и "высокоуровневые". Это очень облегчает работу. Цитата:
Конечно, без лишних переменных надо обходиться. Но с умом. Самое тяжелое - отладка. Вот здесь переменные помогут. Потом код можно оптимизировать, избавиться от переменных. |
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Мэтр - клянусь Вам - у меня есть "библиотечка" своих функций - когда я смотрю на те функции, что были написанны с использованием переменных - мне в них гораздо тяжелей понять СВОЮ-ЖЕ логику, нежели в "лямбдовых".
Если нет переменных - отладки на порядок меньше (т.к. самая большая "неразбериха" как правило из-за них и происходит).
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
А мдшву имеет подсветку переменных? Как notepad++
Цитата:
Последний раз редактировалось gomer, 12.01.2011 в 20:35. |
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Под словом переменная подразумвается обозначние меняющее свое значение в ходе программы (если аргумент всегда одинаков - то его и "отлавливать" не нужно - что не скажешь про переменные). Насчет вывернутости - давайте говорить обоснованно.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
лекго - см. пример из #19. если не понятно - приведи свой
p.s. более того - как раз в "циклах с ветвлением" и всплывает "запутка" с переменными - надо в каждой подветке учесть откуда она могла "приветвится" и что сейчас творится с перемнной (или наделать на каждую комбинацию свою перемнную - а это как правило совсем не мало).
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 13.01.2011 в 01:34. |
|||
|
||||
- Регистрация: 24.07.2005
Москва
Сообщений: 1,335
|
По просьбе Евгения выкладываю SciTE. Сборка ruboard + моя доработка добавил лексический анализатор языка apdl и еще чего-то не помню.
На лучший редактор не претендую, но с влайд не дружу. 1) ненавижу отладку - и в итоге ей не пользуюсь. 2) много тупых вещей типа окно трассировки нужно закрывать постоянно. SciTE - не требует установки, распространяется по GPL. Полностью настраивается с помощью скриптов - разбираешься в существующих скриптах (коментариях) и делаешь по образу и подобию, так можно добавлять свои элементы в падающее меню, назначать сочетание клавишь и т.п. А в данный момент пишу под брикс а потом адаптирую под акад, уже стал получаться сразу кроссплатформенный код. |
|||
|
||||
Дима_, в параллельной ветке, вы сказали:
Попробуйте переписать без переменных или значительно сократив их количество. Я не со зла, просто действительно, не всегда код будет проще и легче.
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Цитата:
Евгению - у Вас нет ни одного значения меняющего свое состояния (переменной) - да алгоритм имеет много имен - как их обозначить через (defun xxx ( / a b c) (setq a 1 b 2 c 3)(XXX)) или ((lambda (a b c)(XXX)) '(1 2 3)) ИХМО разницы ни какой - мне удобней второй вариант - вот если бы Вы в цикле "крутили" переменными - там было-бы много мест где запутатся. У setq есть преимущество - сразу после определения имени - в том же операторе, его можно использовать, то есть - (setq a 5 b (* a 2)) вполне законен, такой отдельной "рекурсивной" лямбды в автолиспе не предусмотренно, но минус что перед тем как использовать переменную - ее неплохобы вынести в локальные - это как правило делают непосредственно в defun'е (лямбды отдельно для обозначения писать нет смысла - но если лямбда и так используется (например внутри mapcar'а) - то можно) и в этом и есть "камень преткновения" - если мы используем эту переменную (именно как переменую) - надо всегда четко осознавать из какого места программы вызывается функция используящая ее и вот эти ошибки в "сложнозацикленной" программе замучаешся отлавливать с любым отладчиком. Я лет 15 программировал на "сугубо" императивном ассемблере - там количество именно переменных доходит до тысяч (плюс стек, плюс регистры). Когда перешел на функциональные языки - поверьте испытал "глубокое счастье" - стоит один раз "въехать" и обратно уже не хочется.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Цитата:
Рисование неких произвольных прямолинейных сегментов (наподобие команды LINE). Как именно рисуется "сегмент" - задается именем функции рисования, которое передается аргументом. У функции рисования должно быть два обязательных аргумента - точки начала и конца и, факультативно, какой-то список иных аргументов, которые она уже сама знает. В частном случае, для простоты, это может быть просто отрезок. Но "главная" функция должна: 1. В цикле, до пустого ввода запрашивать точки начала (первый раз) и конца сегмента (до выхода). 2. При этом должны выводиться опции "Предыдущая Начало Откат". "Предыдущая" - это автоматическая привязка начала сегмента к предыдущей первой точке, а "Начало" - запрос новой первой точки. "Откат" - отмена только что нарисованного сегмента. "Предыдущая" точка может быть взята и из прежнего запуска этой программы. 3. Разумеется ввод должен быть защищен от возможных ошибок и недопустимых прерываний. Точки должны быть трехмерными. 4. После ввода очередной точки сегмент должен сразу отрисовываться. Задача несложная. Пригодится абсолютно всем. Вот и можно потренироваться и с переменными, и с лямбдами. Только должно работать без присутствия автора и даже у "обезьяны с гранатой". Требований к форматированию кода и подсветке синтаксиса нет. |
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Мэтр - Вы сомневаетесь что я сюда не смогу добавить vl-catch-all-apply?
p.s.Offtop: я не только тут автолиспом развлекаюсь, но и куда более реально пишу на коммерческой основе, а там не до академических понтов - т.к. за них отвечать придется материально.
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 13.01.2011 в 11:51. |
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
В незначительных количествах - есть моменты плохо (или вообще не) реализованные в автолиспе (замыкания, ограниченность рекурсии и пр.) - если задача выходит за установленные в автолиспе пределы - приходиться "мучатся", ну и естественно есть глобальные переменные. В не автолисп приложениях - только внутри объектов (ООП).
p.s. Короче для реализации алгоритмов я предпочитаю использовать не изменяемые состояния определителей. Достало меня уже объяснять - я никого здесь не уговариваю поступать так-же. Но прошу только - если не понятно как я пишу - не надо меня учить как писать императивно, чтоб вам было понятно - умею я это, но мне так не нравится. Если кто-то не понимает и хочет спросить в чем суть такого способа - другой вопрос. p.p.s Только, не подумайте - мол изучил рекурсию и строит из себя умного - я многие вещи в автолиспе не знаю и переодически об этом здесь спрашиваю. Мне такой стиль больше по душе - это из разряда советов (или тем более "рьяных" споров) что вкусней - чай, кофе или какао.
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 13.01.2011 в 12:19. |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Цитата:
Я просто предлагаю написать конкретную программу. Не маленький фрагмент, а в целом, с конечным результатом. Сроками никак не ограничиваю, можно и через год. Только не говорить, что "если бы не Автолисп". И не как могу, а как надо. "ТЗ" могу уточнить. Чтобы не отвлекаться на исследования, могу помочь готовыми кусками - можешь оптимизировать "по лямбда-исчислению". В своем стиле. А мы все поучимся. А ты её сможешь продавать на коммерческой основе. Одна такая функция заменит десятки разношерстных программ. Offtop: Сегодня на Хабре интересная заметка "Новый программерский жаргон". Известен термин "рефакторинг" (refactoring) - — процесс изменения внутренней структуры программы, не затрагивающий её внешнего поведения и имеющий целью облегчить понимание её работы. И появился термин Рефукторинг (Refuctoring) Это когда вы берёте хорошо продуманный кусок кода и с помощью последовательности небольших обратимых преобразований превращаете в нечто абсолютно непонятное никому, кроме вас. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу) | Red Nova | LISP | 4555 | 24.03.2024 13:44 |
{Конкурс} Lisp. Задачки для студентов | gomer | LISP | 10 | 05.01.2011 16:33 |
Как создать lisp Тройника | Boo87 | LISP | 25 | 16.08.2010 19:54 |
Запуск Lisp команды в новом документе | BlackHarp | LISP | 1 | 26.03.2009 23:06 |
загрузка DOS прог через LISP | Gaa | LISP | 15 | 12.08.2005 19:19 |