Динмическое создание переменных
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Динмическое создание переменных

Динмическое создание переменных

Ответ
Поиск в этой теме
Непрочитано 21.04.2011, 12:43 #1
Динмическое создание переменных
PanNik
 
Регистрация: 09.03.2011
Сообщений: 6

Силюсь создать функцию динамического создания переменной.... но безрезультатно))

Суть в том чтобы передавать в функцию название (прим. Primer), и значение (прим. trololo). Он бы создавал переменную Primer1 содержащую trololo, в следующий раз, если кинуть туда Primer и любое значение, он бы создавал Primer2, с тем самым значением...
Просмотров: 6186
 
Непрочитано 21.04.2011, 13:02
#2
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


показывай код своих "усилий".
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 21.04.2011, 14:20
#3
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Я думаю что переменные это от незнания что такое ассоциативный список. Тебе для чего они нужны?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 22.04.2011, 07:06
#4
PanNik


 
Регистрация: 09.03.2011
Сообщений: 6


hwd

Показывать, собственно, нечего. Есть только блок-схема.

VVA
Переварил найденные в инете крохи информации про ассоциативный список. Очень удобно. Где бы поподробнее что нибудь почитать?

И вот еще такой вопрос, можно ли через Autolisp разбить динамический блок на полилинии, из которых он состоял.

Последний раз редактировалось PanNik, 22.04.2011 в 08:03.
PanNik вне форума  
 
Непрочитано 22.04.2011, 08:28
#5
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


А зачем разбивать? Состав блока выцепить можно и так.
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 22.04.2011, 11:34
#6
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


PanNik, Я тебе пример привел в #27
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 22.04.2011, 12:17
#7
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Можно и мне вставить пару копеек?

Есть такая замечательная функция как set (не путать с setq!)
Ей можно имя переменной задавать другой переменной.
Типа:
Код:
[Выделить все]
(setq num 12345);переменная где хранится последний номер динамической переменной
(setq abcd (strcat "yoklmn" (vl-princ-to-string num)))

;собственно создание динамической переменной
(set (read abcd) "что угодно")

;зная начальный и конечный номера массива переменных мы можем
;прочесть все от yoklmn0 до yoklmn12345
Supermax вне форума  
 
Автор темы   Непрочитано 22.04.2011, 12:40
#8
PanNik


 
Регистрация: 09.03.2011
Сообщений: 6


VVA, ага, уже видел, спасибо!
PanNik вне форума  
 
Непрочитано 22.04.2011, 16:52
#9
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Мой тебе совет...
Никогда не используй эту динамическую хрень
Lisp есмь фича юзающая списки
Особенно игнорируй Супермаксово
ИМКХЭ
Олег (jr.) вне форума  
 
Непрочитано 22.04.2011, 16:54
#10
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


Олег (jr.), лично я только с третьего раза понял чего ты хотел сказать
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 23.04.2011, 10:54
#11
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от Лиспер Посмотреть сообщение
Олег (jr.), лично я только с третьего раза понял чего ты хотел сказать
Не люблю флудить... кароч:
нафик динамические, если есть NTH и др ф-ции
На практике вряд ли эти динамические будут
использоваться
Олег (jr.) вне форума  
 
Непрочитано 24.04.2011, 17:33
#12
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Что за дым? Я этот код систематически использую. Когда надо обрабатывать много элементов, надо не создавать себе проблем с огромными списками' а сразу формировать и классифицировать нужные данные. К любой переменной можно создать подтипы с номерами.
и переменную с границей диапазона.
И поверьте' я знаю вкус с этих устриц.
Supermax вне форума  
 
Непрочитано 24.04.2011, 21:26
#13
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Сугубо ИМХО - лишнее. В LISP'е намного проще создавать [ассоциативные] списки и работать с ними, чем создавать динамические переменные.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.04.2011, 15:24
#14
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,202
<phrase 1=


Supermax,
ммм...а вот как бы все эти переменные обозначить для функции как локальные? А то мусорить как-то не хорошо.
Apelsinov вне форума  
 
Непрочитано 25.04.2011, 15:33
#15
Shraybicus


 
Регистрация: 05.12.2010
Сообщений: 104


Цитата:
Сообщение от Apelsinov Посмотреть сообщение
ммм...а вот как бы все эти переменные обозначить для функции как локальные? А то мусорить как-то не хорошо.
Просто установить для всех nil - очистка переменных в конце функции

Код:
[Выделить все]
 (mapcar '(lambda (var) (set (read var) nil)) listVals)
где listVals - список с переменными
Shraybicus вне форума  
 
Непрочитано 25.04.2011, 15:40
#16
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,202
<phrase 1=


Shraybicus, ну то есть списочек то придется ввести, ч.т.д., да и засовывать эту заплатку придется в обработчик ошибок, на всякий.
Apelsinov вне форума  
 
Непрочитано 25.04.2011, 15:46
#17
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Supermax Посмотреть сообщение
Я этот код систематически использую. Когда надо обрабатывать много элементов, надо не создавать себе проблем с огромными списками' а сразу формировать и классифицировать нужные данные
Можно пример описания задачи где это с Вашей точки зрения оправдано.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 25.04.2011, 16:05
#18
Shraybicus


 
Регистрация: 05.12.2010
Сообщений: 104


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Можно пример описания задачи где это с Вашей точки зрения оправдано.
Могу привести пример, когда мне это понадобилось.
Когда писал диал. окна с помощью DCL-окон, то прикручивал к элементам окна функции (такие как, например, set_tile). Конечно надо было создать для начала список с ключами полей формы.
Это позволило значительно сократился код в размере.

Цитата:
Сообщение от Apelsinov Посмотреть сообщение
Shraybicus, ну то есть списочек то придется ввести, ч.т.д., да и засовывать эту заплатку придется в обработчик ошибок, на всякий.
Всегда есть отрицательные стороны.
Shraybicus вне форума  
 
Непрочитано 25.04.2011, 17:58
#19
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


Я делаю так(иногда):
Код:
[Выделить все]
(setq var_name (list 'var1 'var2));имена переменных
(setq var (list 10 20));значения переменных

(mapcar 'set var_name var);присвоение значения переменным
(mapcar '(lambda (x) (set x nil)) var_name);удаление мусора
__________________
Никогда не спорьте с дураками - они опустят Вас до своего уровня и победят за счет опыта
CB вне форума  
 
Непрочитано 25.04.2011, 18:31
#20
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Цитата:
Сообщение от Shraybicus Посмотреть сообщение
Когда писал диал. окна с помощью DCL-окон, то прикручивал к элементам окна функции (такие как, например, set_tile). Конечно надо было создать для начала список с ключами полей формы.
Когда мне подобное требуется, я просто читаю dcl-файл (если это вообще требуется), и фильтрую элементы со словом "key=". А имена ключей у меня и так подчиняются некоторым моим внутренним законам, так что отследить, что за что отвечает - не проблема.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 27.04.2011, 09:29
#21
PanNik


 
Регистрация: 09.03.2011
Сообщений: 6


Дайте пожалуйста ссылку на учебный материал по ассоциативным спискам, а то ничего непонятно...
PanNik вне форума  
 
Непрочитано 27.04.2011, 10:14
#22
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Да там материалов-то - см. справку автокада по функциям assoc, subst.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 27.04.2011, 10:21
#23
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Ассоциативный список - это просто список списков, у которых 1-й элемент является ключом. Пример - dxf коды в Автокаде. Нарисуй отрезок и набери в командной строке (entget(entlast)). Увидишь что-то похожее
Цитата:
((-1 . <Имя объекта: 7ef92690>) (0 . "LINE") (330 . <Имя объекта: 7ef90d08>) (5
. "2DB2") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 .
"AcDbLine") (10 331.511 226.191 0.0) (11 439.551 198.487 0.0) (210 0.0 0.0 1.0))
Первые элементы - это dxf коды примитива, он же ключ.
Поиск нужных данных осуществляет функция assoc, замену - subst
Я знаю, что в списке с ключом 8 находится имя слоя, тогда
Цитата:
Команда: (assoc 8 (entget(entlast)))
(8 . "0")
вернет мне список с ключом, а второй элемент - это нужное мне имя слоя
Ключом (первым элементом) может быть и строка. Assoc чувствительна к регистру.
Цитата:
Команда: (setq lst (list (list 1 "Первый") '(2 "Второй")(list 3 10)(list "first" "Тоже первый")))
((1 "Первый") (2 "Второй") (3 10) ("first" "Тоже первый"))

Команда: (assoc 1 lst)
(1 "Первый")

Команда: (assoc "first" lst)
("first" "Тоже первый")

Команда: (assoc 3 lst)
(3 10)
В общем то вот и весь материал
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 27.04.2011, 14:27
#24
PanNik


 
Регистрация: 09.03.2011
Сообщений: 6


большое спасибо, это наверное будет попроще чем создавать динамические переменные, и наверняка полегче для компутера
PanNik вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Динмическое создание переменных



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание диалоговых окон в AutoCAD TwoZero Программирование 145 11.03.2015 18:15
Как выдать список переменных (setvar) в текстовый файл Кларисса AutoCAD 6 03.06.2013 13:20
Программно получить список системных переменных (без вывода в текстовый файл) Ax3 Программирование 3 27.12.2010 16:29
Создание Unnamed group. Как? Diman111 Программирование 4 25.02.2008 09:29
Одна из целей: Создание экспертных систем на базе AutoCAD. Сергей Юрьевич Программирование 9 01.01.2005 15:17