Сообщество программистов Autodesk в СНГ
Статьи => Опубликованные статьи => Тема начата: Александр Ривилис от 25-02-2014, 18:30:04
-
Ошибка AutoLISP progn - слишком много аргументов
-
(apply 'progn (список любой длинны ...))
Этот метод так-же подходит ко всем функциям с произвольным числом аргументов.
-
(apply 'progn (список любой длинны))
Даже в компилированном в fas/vlx?
-
Не знаю - так как не скомпилировал ни 1 своего проекта (делал компиляцию только для проверки совместимости различных "хитрых" примочек с компилированными программами) - почему - писал уже не раз - я вижу больше отрицательных сторон в этом действии. Но в общем не вижу причин почему в таком виде скомпилированная версия "брыкнется" (проверять не буду - для меня это не актуально - по мне лучшеб вообще компиляции автолиспа не было).
-
Тогда ты невнимательно прочитал статью, ибо в ней:
...При проверке текста в VLIDE (при некоторых условиях) можно получить ошибку. При этом некомпилированный lisp продолжает корректно работать. Попытка скомпилировать lisp в fas или vlx также приводит к ошибке вида "too many arguments..."...
И соотвественно твой ответ к статье не имеет никакого отношения.
-
Вряд-ли - это старая ошибка которая проявляется и в не компилированных лиспах - если количество аргументов у любой функции превышает 255, то в зависимости от версии и расположения звезд она ведет себя по разному не стабильно (бывает проскочит, а бывает нет) - в компилированной она просто знает что так нельзя - везде решается через apply...
-
везде решается через apply...
Только если список формируется динамически. Но если список создается через (list ...), то мы возвращаемся к тому же ограничению.
-
list тоже является функцией, соответственно и на нее действует ограничение на 255 "настоящих" аргументов - progn тут ни причем
-
В 2014 не рекомендую использовать квотированные функции,
используйте лучше
function (lambda(arg)...
избежите лишних проблем
-
В 2014 не рекомендую использовать квотированные функции
тогда уж просветите, что случилось в 2014 с квотированием (а то переписывать мне все лиспы из-за причины с неясной аргументацией как-то не хочется).
-
Не вем, но натыкался совсем недавно в частности с использованием
(COMMAND-S "_.pline" ...
-
Я что-то пока не уловил связи между Вашими постами...
-
Тогда попробуй что-то вроде
(command "_.pline") (apply 'command point_list) command "CL")
(в реалии использую mapcar)
и скажи как работает
-
Для начала посмотрите на кол-во скобок в Вашем примере. Кто Вас так научил писать??, почему оно вообще должно работать? если судя по названию в списке точки? В вашем посте написано про различия в использовании ' и function которые пошли начиная с 2014 автокада (ну или года) - где они - могу только предположить что Ваш вывернутый на изнанку "алгоритм" передачи в ком. строку который по совокупности компенсации ошибок каким-то чудом работал в предыдущих версиях перестал работать в 2014 - при чем тут function?
-
Думаю что речь идет про FIBERWORLD, нулевое значение которой радикально меняет поведение AutoCAD, но никак с темой топика не связана.
-
Для начала посмотрите на кол-во скобок в Вашем примере. Кто Вас так научил писать??, почему оно вообще должно работать? если судя по названию в списке точки? В вашем посте написано про различия в использовании ' и function которые пошли начиная с 2014 автокада (ну или года) - где они - могу только предположить что Ваш вывернутый на изнанку "алгоритм" передачи в ком. строку который по совокупности компенсации ошибок каким-то чудом работал в предыдущих версиях перестал работать в 2014 - при чем тут function?
Не хочу ничего доказывать писал навскидку
для сведения последняя программа весом 31 кб
написанная исключительно с использованием command-s
работает без ошибок и проверена у клиентов в штатах
есть нюансы но я об этом умолчу раз вы такие умные
-
для сведения последняя программа весом 31 кб
написанная исключительно с использованием command-s
Я рад за Вас - в нелекгом труде программиста под автокад (и не только под него) гораздо сложней продать программу, а написать можно, как правило, несколькими способами, в том числе и командными методами. Желаю, чтоб в этом, ключевом, направлении Ваши дела шли успешно. Но лично для меня размер программы в килобайтах (оно же как и, например, в строках) не значит ровным счетом ничего, более того, при прочих равных, более короткая мне будет интересней - как правило она лучше написана (тут есть много НО - которых я позволю себе не перечислять). Вы пишете что начиная с 2014 автокада есть какие-то подводные камни при использовании квотирования как альтернативу function. Так будьте добры напишите пример который отличает версию 2014 от предыдущих в этом аспекте - если она есть, да еще и существенная - лично я буду Вам безмерно благодарен, то что вы приводите до этого не имеет ничего общего с вышеописаннной проблемой.
з.ы. Про код приведенный Вами - он действительно оставляет желать лучшего в плане реализации по многим критериям и подводным камням - гарантирую что для нормальной обертки используемого Вами фрагмента потребуется гораздо больше байт кода (и надежность все равно будет выше), нежели реализовать то-же самое другими доступными путями в автолиспе. Поэтому у меня заркадывается подозрение, что 31 килобайт получился не из-за сложности, либо всесторонней проработке функционала, а просто по квалификации - может я и ошибаюсь.