Как очистить память?

Форум пользователей пакета Mathematica

Модератор: Admin

Somenoob
Сообщения: 5
Зарегистрирован: Вс авг 26, 2012 2:51 pm

Как очистить память?

Сообщение Somenoob » Вс авг 26, 2012 2:53 pm

Здравствуйте. Подскажите пожалуйста, как очистить память Математики? Есть Clear и ClearAll, но так есть аргументы, что не удобно.
Есть еще ClearSystemCache[], но у меня не работает, все равно остаются в памяти значения переменных.

Сергей46
Сообщения: 9
Зарегистрирован: Пт июл 13, 2012 7:49 pm

Сообщение Сергей46 » Вс авг 26, 2012 3:59 pm

Вызов функции ClearSystemCache[] должен работать, проверено. Используйте Remove, предварительно отменив атрибут Protected. Средства управления памятью здесь более эффективны, чем в Maple. Проверено неоднократно.

Somenoob
Сообщения: 5
Зарегистрирован: Вс авг 26, 2012 2:51 pm

Сообщение Somenoob » Вс авг 26, 2012 4:24 pm

Спасибо. Remove помогает, но он опять просит указывать, что именно надо remove. Unprotect то же не помогает, так как видимо изначально величины не запротекчены.
Пример. Пишу

Input: y={x,z}
Out: {x,y}

ClearSystemCache[]

Input: y
Out: {x,z}

Не знаю, что делать. :-(

VSI
Сообщения: 305
Зарегистрирован: Вт мар 15, 2005 6:40 pm
Откуда: Мариуполь

Сообщение VSI » Вс авг 26, 2012 5:04 pm

Попробуйте так:

In: y={x,z}
Out: {x,y}

In: y=.

In: y
Out: y

Сергей46
Сообщения: 9
Зарегистрирован: Пт июл 13, 2012 7:49 pm

Сообщение Сергей46 » Вс авг 26, 2012 9:34 pm

In[5]:= y = {x, z}
Out[5]= {x, z}
In[6]:= Definition[y]
Out[6]= Null
In[7]:= Clear[y]
In[8]:= Definition[y]
Out[8]= Null
In[9]:= y = {x, z}
Out[9]= {x, z}
In[10]:= Remove[y]
In[11]:= Definition[y]
Out[11]= Null
In[12]:= a = 56; b = Clear[a]; c = a =.; b === c
Out[12]= True

Somenoob
Сообщения: 5
Зарегистрирован: Вс авг 26, 2012 2:51 pm

Сообщение Somenoob » Вт авг 28, 2012 10:18 am

Спасибо за советы, но это не совсем то, что нужно.

Представим, что у меня сотни этих y,z,x и еще бог знает чего. И в какой-то момент в документе мне надо избавится от присвоенных им значений разом, то есть очистить всю память.
Как это сделать?

Сергей46
Сообщения: 9
Зарегистрирован: Пт июл 13, 2012 7:49 pm

Сообщение Сергей46 » Вт авг 28, 2012 1:25 pm

Если вы аккумулировали ненужные вам значения в списке, то можно воспользоваться простой функцией Аладьева. Вызов ClearValues[x] возвращает пустой список, одновременно удаляя из текущего сеанса все переменные, имеющие значения из списка x. Привожу пример из конспекта мастер-класса автора. По моей информации готовится книга по этому курсу то ли у нас, то ли в Белоруссии или Украине. Может пригодиться для вашего случая.

In[1858]:= ClearValues[x_ /; ListQ[x]] := Select[Map[Remove, Select[Names["`*"], MemberQ[x, ToExpression[#]] &]], # != "Null" &]

In[1859]:= {a = 42, b = 75, c := 75, d = 450, h5 := 65, Kr = 16, Art = x + Sin[y]}
Out[1859]= {42, 75, Null, 450, Null, 16, x + Sin[y]}
In[1860]:= ClearValues[{42, 75, 75, 450, 65, 16, x + Sin[y]}]
Out[1860]= {}
In[1861]:= Names["`*"]
Out[1861]= {"ClearValues"}
In[1862]:= {a, b, c, d, h5, Kr, Art}
Out[1862]= {a, b, c, d, h5, Kr, Art}

Somenoob
Сообщения: 5
Зарегистрирован: Вс авг 26, 2012 2:51 pm

Сообщение Somenoob » Ср авг 29, 2012 8:21 am

Странно, что все так сложно. В Maple, например, есть функция Restart.
Тут нет аналога?

Сергей46
Сообщения: 9
Зарегистрирован: Пт июл 13, 2012 7:49 pm

Сообщение Сергей46 » Ср авг 29, 2012 10:11 am

Конечно есть, как и у всех достаточно развитых систем. см. ниже

In[1]:= x = 56; y := 78; {x, y}
Out[1]= {56, 78}
In[2]:= Exit[]
Out[1]= {x, y}
In[1]:= {x, y}
Out[1]= {x, y}
In[2]:= x = 56; y := 78; {x, y}
Out[2]= {56, 78}
In[3]:= Quit[]
In[1]:= {x, y}
Out[1]= {x, y}

Однако все зависит от того, что вам нужно. Если вы хотите привести сессию в исходное состояние, то см. выше, если же хотите это сделать частично, то см. еще выше. В целом же советую не работать со сложными средствами методом тыка, а изучить их хотя бы на начальном уровне.

Somenoob
Сообщения: 5
Зарегистрирован: Вс авг 26, 2012 2:51 pm

Сообщение Somenoob » Ср авг 29, 2012 10:37 am

Да, точно. Это то, что я и искал с самого начал, спасибо.