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

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

Функция для работы с именем переменной

Ответ
Поиск в этой теме
Непрочитано 22.08.2007, 18:49 #1
Функция для работы с именем переменной
DFooz
 
учащийся
 
Москва
Регистрация: 25.03.2007
Сообщений: 44

Сущ-ют ли функции для работы с именем переменной?
Напр., есть имя "Func_1". Можно ли как-то выцепить единичку из имени?
Просмотров: 5480
 
Непрочитано 22.08.2007, 22:10
#2
Клякса

Инженер
 
Регистрация: 15.08.2007
Питер
Сообщений: 36
<phrase 1=


Почти уверен, что нет. А почему не ввести новую переменную?
__________________
Ошибку нашел и исправил, но в чем она заключалась, так и не понял...
Клякса вне форума  
 
Непрочитано 22.08.2007, 22:38
#3
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Программы с самомодифицирующемся кодом...
Ходят слухи что на лиспе это возможно, хотя может это просто слухи...
Makswell вне форума  
 
Непрочитано 22.08.2007, 22:56 Re: Функция для работы с именем переменной
#4
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от DFooz
Сущ-ют ли функции для работы с именем переменной?
Напр., есть имя "Func_1". Можно ли как-то выцепить единичку из имени?
Не очень понятно, зачем, но в принципе, нечто такое можно сделать так:
Код:
[Выделить все]
(setq func_1    '(1 2 3 4)
      tmp       'func_1
      func_name (vl-symbol-name tmp)
      base_name (vl-string-right-trim "0123456789" func_name)
      digital   (atoi (substr func_name (1+ (strlen base_name))))
)
(set (read (strcat base_name (itoa (1+ digital)))) func_1)
(setq func_1 nil)
Цитата:
Сообщение от Makswell
Программы с самомодифицирующемся кодом...
Ходят слухи что на лиспе это возможно, хотя может это просто слухи...
Самомодификация это совсем другое. На ЛИСПе, действительно реализуется достаточно несложно, другое дело, что задач, где это можно применить с пользой, практически нет.
Alaspher вне форума  
 
Автор темы   Непрочитано 24.08.2007, 21:41
#5
DFooz

учащийся
 
Регистрация: 25.03.2007
Москва
Сообщений: 44


Цитата:
Не очень понятно, зачем,
я делаю форматки и хотелось бы в функцию пересылать часть имени переменной (из А1 - 1, из А2 - 2). Просто, чтобы не писать всё время разные параметры пересылки(1, 2), а иметь эту функцию, саму выделяющую часть имени файла.
DFooz вне форума  
 
Непрочитано 24.08.2007, 22:26
#6
Кулик Алексей aka kpblc
Moderator

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


А если просто назначать значение переменной и его передавать в функцию? Что мешает?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 24.08.2007, 23:51
#7
DFooz

учащийся
 
Регистрация: 25.03.2007
Москва
Сообщений: 44


длина кода увеличится. Сущ-ют функции eval, apply, вот я и подумал, может вдруг есть и такая функция.

Всем большое спасибо.
DFooz вне форума  
 
Непрочитано 25.08.2007, 00:00
#8
Кулик Алексей aka kpblc
Moderator

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


Да ну?? Быть того не могет! Может, логику кода надо пересмотреть?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.08.2007, 18:07
#9
DFooz

учащийся
 
Регистрация: 25.03.2007
Москва
Сообщений: 44


Цитата:
Быть того не могет!
В моём случае может.

Цитата:
Может, логику кода надо пересмотреть?
Может. Если кто предложит свой вариант на ЛИСПе будет интересно посмотреть.
DFooz вне форума  
 
Непрочитано 25.08.2007, 20:56
#10
Авдотья Прасковьевна


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


Цитата:
Сообщение от DFooz
Цитата:
Быть того не могет!
В моём случае может.

Цитата:
Может, логику кода надо пересмотреть?
Может. Если кто предложит свой вариант на ЛИСПе будет интересно посмотреть.
Ой, я столько лиспов знаю.
Только непонятно, что именно вам надо.
Может вы свой вариант покажете?
Авдотья Прасковьевна вне форума  
 
Непрочитано 25.08.2007, 22:46
#11
Кулик Алексей aka kpblc
Moderator

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


Какой вариант кода? Вариантов рисования форматок, извиняюсь, как собак нерезанных (я и то свой написал).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.08.2007, 00:07
#12
Apelsinov

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


Я очень извиняюсь, что не в тему...
я, если честно, по теме ниче не понял...почти
я как в запяматованном году себе форматки нарисовал, так ими и пользуюсь, и не знаю зачем тут лисп.

Авдотья Прасковьевна - ваша фамилия случаем не Кибершутер ?
__________________
apel.fas
Apelsinov вне форума  
 
Непрочитано 26.08.2007, 00:10
#13
Авдотья Прасковьевна


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


Цитата:
Сообщение от Apelsinov
Я очень извиняюсь, что не в тему...
я, если честно, по теме ниче не понял...почти
я как в запяматованном году себе форматки нарисовал, так ими и пользуюсь, и не знаю зачем тут лисп.

Авдотья Прасковьевна - ваша фамилия случаем не Кибершутер ?
Да, но это девичья.
А как вы узнали?
Авдотья Прасковьевна вне форума  
 
Непрочитано 26.08.2007, 00:42
#14
Apelsinov

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


Цитата:
Сообщение от Авдотья Прасковьевна

Да, но это девичья.
А как вы узнали?
О, это простое совпадение!
Однако, обещаю Вам: жалеть, завидовать и охотно подсказывать.

Очень надеюсь на взаимность.
__________________
apel.fas
Apelsinov вне форума  
 
Непрочитано 26.08.2007, 10:43
#15
Post

конструктор
 
Регистрация: 29.07.2005
Ростов-на-Дону
Сообщений: 1,095
<phrase 1=


[: |||||||| : ]
__________________
С уважением!!!
Post вне форума  
 
Непрочитано 27.08.2007, 08:14
#16
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от DFooz
Цитата:
Не очень понятно, зачем,
я делаю форматки и хотелось бы в функцию пересылать часть имени переменной (из А1 - 1, из А2 - 2). Просто, чтобы не писать всё время разные параметры пересылки(1, 2), а иметь эту функцию, саму выделяющую часть имени файла.
Честно сказать - стало значительно непонятнее... Передача данных в функции стандартно решается через аргументы.
Alaspher вне форума  
 
Непрочитано 27.08.2007, 08:54
#17
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,626


Для DFooz.
У вас концепция не продумана. Или ее вовсе нет. Вот вы и паритесь.
Цитата:
я делаю форматки
Все делают форматки, но без таких проблем.
Profan вне форума  
 
Непрочитано 27.08.2007, 09:41
#18
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Alaspher
Передача данных в функции стандартно решается через аргументы.
Можно пойти другим путем, на основе данных, сгенерировать функцию, специально заточенную под эти данные...
Как пример:
>Евгений Елпанов (2006-03-12 10:50:01)
Елпанов Евгений вне форума  
 
Непрочитано 27.08.2007, 09:58
#19
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от Елпанов Евгений
Можно пойти другим путем, на основе данных, сгенерировать функцию, специально заточенную под эти данные...
Можно, но, обычно, проще сделать что-то такое:
Код:
[Выделить все]
(defun multi-subst-1 (lst lst-i / tmp i)
    (cond ((not lst) nil)
          ((setq tmp (assoc (setq i (car lst)) lst-i))
           (cons (cadr tmp) (multi-subst-1 (cdr lst) lst-i))
          )
          (t (cons i (multi-subst-1 (cdr lst) lst-i)))
    )
)
Не так универсально, но гораздо проще.

[* небольшая правка - локализация переменных]
Alaspher вне форума  
 
Непрочитано 27.08.2007, 10:08
#20
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


>Alaspher
Вы конечно правы, так проще, короче, понятнее...
Я изучал различные способы загрузки программ - мне нужна была защита изнутри лиспа. Я ее получил!
Принципы те же, что и в предложенной мной функции - программа генерируется на основе ключа, если ключ правильный - программа будет работать, не правильный - не будет! Самое главное в том, что в лиспе не хранится проверки ключа - проверить можно самой работой программы.
Елпанов Евгений вне форума  
 
Непрочитано 27.08.2007, 10:23
#21
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


> Елпанов Евгений
Как демонстрация возможностей создания функций по данным - не вопрос - нормальный пример.

Кста, я погорячился, насчёт меньшей универсальности моего варианта мультизамены, как раз наоборот - он чуть более универсальный, поскольку, в оригинальной мультизамене есть проблемы при неатомарных элементах замены.
Alaspher вне форума  
 
Непрочитано 27.08.2007, 12:04
#22
Эдуард

строительство
 
Регистрация: 16.01.2004
Петербург
Сообщений: 165
<phrase 1=


Я так понял имеется ввиду динамическое конструирование имени переменной ? Поиграйтесь с функцией set.
Пример:
Присваиваем переменной A1 значение 4

Код:
[Выделить все]
(setq x 1)
 (set (read(strcat "A" (itoa x))) 4)
Эдуард вне форума  
 
Автор темы   Непрочитано 27.08.2007, 23:35
#23
DFooz

учащийся
 
Регистрация: 25.03.2007
Москва
Сообщений: 44


извиняюсь за оффтопик.
Цитата:
Я так понял имеется ввиду динамическое конструирование имени переменной?
Не, выделение части имени переменной. Но такое реализовать нельзя. За этот код тоже большое спасибо=)
Цитата:
Какой вариант кода? Вариантов рисования форматок, извиняюсь, как собак нерезанных (я и то свой написал).
Через поиск не нашёл.
Мне для штампа.
Как я понял, все делают с помощью блока с атрибутами, кот. потом изменяют, да? А если надо в несколько строк написать, то берут несколько атрибутов.
Цитата:
Ой, я столько лиспов знаю.
Только непонятно, что именно вам надо.
сейчас надо заполнить штамп.
Цитата:
и не знаю зачем тут лисп.
Чтоб его изучить.
DFooz вне форума  
 
Непрочитано 28.08.2007, 00:55
#24
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от DFooz
Через поиск не нашёл.
Поиск по словам блок формат и там перейти по ссылке "в сообщениях".
Цитата:
Сообщение от DFooz
Как я понял, все делают с помощью блока с атрибутами, кот. потом изменяют, да? А если надо в несколько строк написать, то берут несколько атрибутов.
"Я Вам не скажу за всю Одессу..." Лично я делал именно блоком с атрибутами. Хотя, по-моему, варианты использования и таблиц были, а уж динамические блоки форматок - так те сами просятся... Была бы возможность использовать дин.блоки, а остальное - вопрос техники.
Цитата:
Сообщение от DFooz
сейчас надо заполнить штамп.
А данные откуда брать?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.08.2007, 09:33
#25
Эдуард

строительство
 
Регистрация: 16.01.2004
Петербург
Сообщений: 165
<phrase 1=


(setq A1 5)
(set (read(vl-string-translate "1" "2"(vl-princ-to-string (quote A1)))) 2)
Эдуард вне форума  
 
Непрочитано 28.08.2007, 11:28
#26
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,626


Цитата:
Как я понял, все делают с помощью блока с атрибутами
Совсем не все. Можно вставить штамп блоком, а текст вводить (или редактировать) прямо на экране. Не думаю, что это займет больше времени, чем редактиирование атрибутов. А уж рамку можно просто отрисовать программно, на фига для нее городить динамический блок. Рамка и штамп - ничтожная часть чертежа, на кой ляд им уделять какое-то особое внимание?
Profan вне форума  
 
Автор темы   Непрочитано 29.08.2007, 15:27
#27
DFooz

учащийся
 
Регистрация: 25.03.2007
Москва
Сообщений: 44


Эдуард, спасибо.


Цитата:
А уж рамку можно просто отрисовать программно, на фига для нее городить динамический блок.
рамка отрисовывается программно.
Цитата:
Рамка и штамп - ничтожная часть чертежа, на кой ляд им уделять какое-то особое внимание?
Для изучения ЛИСПа и т.д. Надо ведь начинать с малого=)


Цитата:
А данные откуда брать?
Из файла записывает в список, а потом распределяет по аттрибутам.
DFooz вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Функция для работы с именем переменной