(unload "prilojenie.lsp")
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > (unload "prilojenie.lsp")

(unload "prilojenie.lsp")

Ответ
Поиск в этой теме
Непрочитано 16.02.2006, 20:38 #1
(unload "prilojenie.lsp")
mmax
 
Программист широкого профиля.
 
Челябинск
Регистрация: 08.09.2005
Сообщений: 722

Господа знающие люди,
Например я хочу создать несколько ЛСП которые будут чегонибудь отрисовывать – например как garden_patch. Допустим первое приложение мне чегонгибудь нарисовало, запускаю следующее, но вот беда переменные в которых сохранены координаты начальных и конечных точек линий и др. объектов имеют имена (x, y, z, xx, yy, xy, yx …… итд) во всех приложениях – могут возникнуть конфликты, а присваивать уникальные имена в каждом fail.lsp очень трудоемкое занятие которое может свести с ума любого начинающего программиста.

Скажите пожалуйста как заставить lsp-приложение, после того как оно закончит свою работу, выгрузиться из памяти, дабы избежать совпадения имен переменных при запуске других приложений.
В книгах Полещука НН про такую функцию нигде не рассказывается, но упоминается о том чтобы переменные и функции имели уникальные имена.
Просмотров: 3162
 
Непрочитано 16.02.2006, 20:58
#2
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Внимательнее читайте Полещука. Если переменные записаны в заголовке функции после "слеша" (косой черты), то они являются локальными и время их жизни заканчивается с прекращением работы функции.

(defun Название функции (Арументы / Локальные переменные)
{Smirnoff} вне форума  
 
Непрочитано 17.02.2006, 08:21
#3
Кулик Алексей aka kpblc
Moderator

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


Насчет имен переменных - я что-то на ура не смог найти свой старый пост. Лично у меня получилось так (идея слизана с ruCAD, с небольшой адаптацией):
1. Все функции имеют префикс, уникальный по максимуму - мой ник, их имя формируется примерно так: <ник>-<Над чем работаем>-<выполняемое действие> (т.е. нет функции, например cl2pl (конвертация линии в полилинию, есть kpblc-conv-line-to-pline)
2. Функции, возвращающие какие-либо значения, имеют в начале имени знак "подчеркивания".
3. Функции, не возвращающие значения, но используемые только внутри других функций, как правило, имеют знак подчеркивания впереди (хотя и не всегда).
4. Глобальные переменные обрамляются знаком "*" и имеют опять же мой ник в качестве начала имени.
5. Имя должно быть информативным, на английском языке. Нет имен i, k, aa - есть item (перечисление элементов списка, к примеру), counter (счетчик), selset (набор примитивов - Selection Set), *kpblc-activedoc* - указатель на активный документ и т.д.
6. Глобальные переменные определяются в общем загрузчике (и фактически являются константами). Все остальные должны быть локальными, как показал {Smirnoff}.
Ну и так далее.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.02.2006, 18:01 Re: (unload "prilojenie.lsp")
#4
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Сообщение от mmax
Скажите пожалуйста как заставить lsp-приложение, после того как оно закончит свою работу, выгрузиться из памяти,
Если оно Вам очень надо, "выгрузить" все ж можно, об-NIL-ив функции (вернее, переменные, указывающие на эти функции), используемые в этом Лиспе.
Вобще, достаточно удобно все вложенные функции определять и локализовать в пределах "главной" функции приложения, тогда другие программы не смогут их повредить (переопределить) - либо будет работать все, либо рухнет все сразу.
vk вне форума  
 
Автор темы   Непрочитано 19.02.2006, 19:20 Re: (unload "prilojenie.lsp")
#5
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Цитата:
Сообщение от mmax
имеют имена (x, y, z, xx, yy, xy, yx …… итд) во всех приложениях
имеются два файла.lsp
первый рисует квадратики второй треугольники

и если я для каждого файла.lsp координаты базовых точек фигур буду сохранять в переменных с уникальными именами то ..................

Вобщем как я понимаю из всего вышесказанного их просто нужно нилить:
Код:
[Выделить все]
(setq x nil y nil xx nil итд)
Всем огромное спасибо :!: :!:
mmax вне форума  
 
Непрочитано 19.02.2006, 21:38 Re: (unload "prilojenie.lsp")
#6
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Сообщение от mmax
Вобщем как я понимаю из всего вышесказанного их просто нужно нилить:
Код:
[Выделить все]
(setq x nil y nil xx nil итд)
Как я понимаю, в этом случае одна программа не сможет воспользоваться "забытыми" другой программой переменными. Если есть необходимость передавать параметры от одной программы к другой (или сохранять между вызовами) то можно конечно для этой цели использовать глобальные переменные. Только не надо называть их "x" или "y", надо что то более нейтральное вроде "*mmax-points-x*".
Если же такой необходимости нет - то переменные просто локализовать при объявлении функции:
Код:
[Выделить все]
(defun treugolnik ( / x y xx и тэдэ)
................
Цитата:
имеют имена (x, y, z, xx, yy, xy, yx …… итд) во всех приложениях – могут возникнуть конфликты
Не могут. По одной простой причине - перед чтением содержимого переменным надо все ж присвоить какое то значение (если только она не глобальная), иначе смысл в этой переменной весьма невелик )

PS кто то из нас совсем запутался.....
vk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > (unload "prilojenie.lsp")