2014 dxdy logo

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

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




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

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

Имеется переменная 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 
А просто сначала создать копию списка в символьном виде 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 
Аватара пользователя
Красиво! Я как-то забыл, что в 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 
Для сохранения значений переменных есть командa DumpSave.

 
 
 [ Сообщений: 4 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group