2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 [Wolfram Mathematica] манипуляции с переменными и значениями
Сообщение15.04.2015, 20:05 
Аватара пользователя


29/05/11
227
Красноармейск, Донецкая обл.
Добрый вечер!

Представляю вашему вниманию задачу, которая сломала мне мозг, но решить которую очень бы хотелося.

Имеется переменная Params типа {_Symbol..}, например, Params = {a, b, c}. Далее происходит присваивание буквам значения, например, a = 2; b = 4; c = 1, причём эти присваивания не централизованы, разбросаны по коду и, быть может, их и вовсе нет, но используется Block.
Задача написать процедуру, которая создаёт файл с содержимым вида <имя переменной> = <значение>, например,
Код:
a = 2;
b = 4;
c = 1;

Как это сделать?

Основной вопрос: как выудить буквы из списка, когда каждой букве приписано значение? Я думал использовать Block, например, Block[Params, ...], но не получилось.

Практическая польза этой процедуры очевидна.

 Профиль  
                  
 
 Re: [Wolfram Mathematica] манипуляции с переменными и значениями
Сообщение15.04.2015, 23:26 
Заслуженный участник


25/02/11
1797
А просто сначала создать копию списка в символьном виде Params$=ToString/@Params, а в конце менять, что надо? Типа так:
Код:
Params = {a, b, c};
Params$ = (ToString@# <> "=" & /@ Params);
a = 3; b = 4; c = 5;
StringJoin @@@ Transpose@{Params$, ToString /@ Params}

Результатом будет список строк
Цитата:
List["a=3","b=4","c=5"]

 Профиль  
                  
 
 Re: [Wolfram Mathematica] манипуляции с переменными и значениями
Сообщение16.04.2015, 02:25 
Аватара пользователя


29/05/11
227
Красноармейск, Донецкая обл.
Красиво! Я как-то забыл, что в WM есть соответствие строка-переменная.

Тогда посоветуйте ещё по самой задаче, как лучше организовать сохранение параметров, чтобы ими было легче манипулировать. Может, есть какая-то хорошая практика.
Рабочий вариант такой:
Код:
SetParameters[params___Symbol] := Params = ToString /@ {params};

WriteParams[filename_String] :=
  Module[{fl = OpenWrite[filename]},
   WriteString[fl, StringJoin[(# <> "=" <> ToString[Symbol[#]] <> ";\n") & /@ Params]];
   Close[fl];
   ];

SetParameters[a, b, c]

a = 1; b = 2; c = 3;
Block[{c = 4}, WriteParams["~/params.txt"]]

<< ~/params.txt

 Профиль  
                  
 
 Re: [Wolfram Mathematica] манипуляции с переменными и значениями
Сообщение16.04.2015, 07:16 
Заслуженный участник


25/02/11
1797
Для сохранения значений переменных есть командa DumpSave.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group