Почитал английские источники.. Я видимо не правильно придставлял логику рест.. Код: (defun func ( a &rest b ) b) -> (func 1 2 3 4); вернет список (2 3 4) Почти не отличается от непосредственной передачи списка. Надо будет попробовать. Примерно так? Код: (defun func (a b / );b - это список переменных (Foreach n b (setq n a)) )
Код: (defun f-rest (znach var /) (foreach n var (eval (list 'setq n znach))) ) (setq var-list (car (list '(per1 per2 per3)))) (f-rest 10 var-list) Так вроде работает? Переменные принимают заданное значение..
Только всё равно не понятно, зачем неопределенному числу переменных нужно присвоить одно и тоже значение? Lisp это язык списков, почему-то мне кажется твою задачу можно по другому решить.
Qvinto, спасибо почитаю) Disney, основная задача обнулить переменные, все сразу скопом. Мне это поможет в процессе написания функции, что бы не загонять их во 'временные переменные', что бы иметь возможность смотреть, как и в какой момент они изменяются.. Ну и в конечном варианте оставлю эту функцию, что бы при возникновении каких то неполадок, обнулить все переменные (перезагрузить функцию) Конечно, это все колхоз и правильнее было бы отлавливать ошибки, контролить и обходить их.. но пока это сложновато, да и особой надобности нет, так как пишу в основном для себя.
Вот, вот я по началу так же писал, а теперь мне проще заново переписать, чем в свои старые программы изменения вносить. Так в любом случаи все локальные переменные при перезапуске функции в ней обнуляются. Или я опять чего-то не понял?
да, но во время разработки я оставляю список "локальных" пустым, только по завершению вписываю туда что нужно. это нужно в тех случаях, когда функция вроде работает, но не совсем так как надо... я по оставшимся переменным отыскиваю в каком именно месте пошло не так))