|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Ну как тебе сказать, всегда чего-то можно улучшить. Можно последовательные setq в один объеденить - можно append на cons поменять - но это мелочи - надо научится думать "по лисповски" вот тебе пример - скажу сразу, я его накатал только для того чтоб ты "мысль" ухватил - сам бы написал изначально по другому - в этом коде много "лишних" операций, но с моей точки зрения может подвести тебя к "правильной" логике:
Код:
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Цитата:
Опять с рекурсией?
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Ну попробуй сам - "прошагивай" по набору - с одним аргументом - (самой мальенькой координатой).
p.s. с практической точки зрения конечно имеет смысл сохранить список из набора, (да и функцию я бы естественно делал получающую список на входе), но если мы рассматриваем эту задачу в отдельности, то это лишняя операция - попробуй "вытягивать нужное" сразу из него (набора). В вышеуказанной функции мы "пробегаем" по списку 7+количество полученных элементов раз (он правда 2 раза уменьшается) - уверяю достаточно 1-го.
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 29.01.2011 в 10:56. |
|||
|
||||
Попробовал, сократил пару "пробегов", но получилась фигня какая-то
Код:
test1 - функция Pontelimon #41 test2 - функция Дима_ #42 test3 - моя #45 1 полилиния Цитата:
Цитата:
Цитата:
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
1. По поводу скорости - чем никогда не славился лисп - так это скоростью работы. Он хорош скоростью разработки (если писать на нем в лисп стиле). Почему я приемуществнно (везде где возможно) использую лямбды с рекурсиями - мне это дает широчайшие возможности по корректировке кода - в моей практике (лисп и не только) постоянно корректируется ТЗ - если программа написанна в строго функциональном стиле - переправить ее в 5 раз проще и быстрее чем императивную - функции ни как не зависимы - "подводных камней" совместимости данных нет - написал один раз функцию и забыл - работать будет вн зависимости из какого места (состояния) программы ты ее вызвал.
2. Любую рекурсивную функцию можно "развернуть" в цикл - она станет на 2-5% быстрей, но потерят "изменяемость" (хорошие лисп трансляторы делают это автоматом), но написать с нуля такую-же развернутую функцию вряд-ли получится (разная логика) - хотим мы того или нет - алгоритм в деталях будет разный в зависмости от стиля. 3. Ты сейчас "закрутил" в рекурсию логику итеративной программы - потому и результат "не ахти" (получил худшие качества с обоих методов) - забудь мою (и понтелимоновскую) версию попробуй написать с нуля - не оглядываясь на логику той программы - если уже "совсем не как" - могу "свой" вариант "накалякать" (мне это не сложно) - но если хочешь действительно осознать попробуй все таки сам - подскажу лишь, что все действие делается за 1 прогон. з.ы. выйгрыш в скорости в рекурсивной программе - может быть только из-за более удачной реализации алгоритма (с моей точки зрения это достаточно часто).
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Сдаюсь, выкладывай.
ни чего страшного, всему своё время, когда-то я вообще больше года смотрел на описание функций работы со списками(типа mapcar, apply, ...), но так и не понимал, что они делают и как работают, потом почти столько же времени смотрел как их применяют в своих кодах другие, а однажды наконец и я стал ими пользоваться, это оказалось на столько удобно, что я радовался как ребёнок.
__________________
Почему все вдруг становятся умными, когда уже не надо? Последний раз редактировалось Disney, 30.01.2011 в 06:39. |
||||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Для "критиков" не читавших предварительные посты повторю:
Цитата:
Код:
p.p.s - глюк оформления кода в 8 строке - нет там певрой ";" - просто <
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 30.01.2011 в 11:59. |
|||
|
||||
Ну тут всё просто, логическая функция сравнения < при первом проходе не выдаст ошибку если бы даже оба аргумента были nil, зато нам не придёться проверять все последующие проходы min-value на nil
Теперь вопросы:
Всё очень даже не плохо:
Пока видео делал, Do$ уже любезно ответил, но раз сделал выложу.
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
|
||||
"Да это то понятно..."
Например вот: Код:
ну и анализ быстродействия, хотя Дима_ уверяет, что это не показатель. Не скомпилированный LSP Код:
Код:
__________________
Почему все вдруг становятся умными, когда уже не надо? Последний раз редактировалось Disney, 31.01.2011 в 07:42. |
||||
|
||||
Регистрация: 16.11.2010
Сообщений: 89
|
Спасибо за видео, все очень доходчиво объяснено.
Я бы хотел уточнить еще 1 свою функцию(срабатывает 9 раз из 10), хотелось бы добиться 100% работоспособности, есть такой вот код : Код:
А должен он удлинить полилинию налево по оси Х на 0.5 |
|||
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 571
|
Цитата:
Код:
__________________
cadtools |
|||
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 571
|
Посмотрел файл. Дело вот в чем, при проверке
Код:
Нужно сравнивать так Код:
__________________
cadtools |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Несоответствие результатов в Лире | s.vas | Лира / Лира-САПР | 19 | 11.11.2009 07:31 |
Пожалуста помогите правельно написать формулу для Schedule- спецификации | tighineanur | Вертикальные решения на базе AutoCAD | 6 | 24.02.2009 11:24 |
Помощь по Лире | Серега М | Лира / Лира-САПР | 52 | 28.05.2007 02:47 |
Не могу понять в чем ошибка... | DY | Программирование | 5 | 21.02.2007 17:35 |