Mathematica中清除一系列符号定义的函数

Mathematica中使用Clear[symbol_1,symbol_2,... ] 清除符号symbol_i的值和定义。但是,有时需要清除一系列符号的值和定义。比如, 

有一系列变量a, b, c构成一个集和,称作 Vars,

Vars={a,b,c,...};

中间计算得到,

a=1; b=2; c=3;...

现在想清除这一系列变量a, b, c,...的值。

虽然可以将每一个要清除的变量列出,用Clear[a,b,c,...]清除,但是如果这个变量的集合很大,元素有成百上万个,那么使用Clear[ ]很不现实。

下面的函数可以实现这一目标,它输入一个列表(List),调用这一函数之后,将清除这个列表里每个变量的值。

基本想法是,先保持输入不变,将输入转变成一个字符串,再从这个字符串中恢复每一个变量相应的子字符串,比如''a"是变量a相应的字符串,最后使用Clear的另外一种用法Clear["symbol_1","symbol_2",... ]清除每个子字符串对应的变量。


(*给函数设定HoldAll属性,防止参数被计算*)
SetAttributes[ClearList, HoldAll]; 
(*如果输入不是列表List,返回错误信息*)
ClearList::nnarg = "The argument `1` is not a list."; 
ClearList[syml_] /; 
   If[Head[Evaluate[syml]] === List, True, 
     Message[ClearList::nnarg, syml]; False] := Module[{str, seq},
   str[1] = ToString[HoldForm[syml]];
   (*ClearList[{}] or ClearList[Var]*)
   If[StringFreeQ[str[1], "{" ~~ __ ~~ "}"],
    str[1] = ToString[Trace[syml][[2]]]];
   (*ClearList[{c0[1],...}]*)
   str[2] = 
    StringReplace[
     str[1], {"{" -> "", "}" -> "", "[" ~~ __ ~~ "]" -> ""}];
   str[3] = StringSplit[str[2], {", "}];
   seq = str[3] /. List -> Sequence;
   Clear[Evaluate[seq]];
 ];


测试如下:


1.  Var = {a, c0[1], epsilon};
     a = 1; c0[1] = 2; epsilon = 3;
     ClearList[Var];


2. a = 1; c0[1] = 2; epsilon = 3;
     Var := {a, c0[1], epsilon};     (*此处延迟赋值*)
     ClearList[Var];


3. a = 1; c0[1] = 2; epsilon = 3;
    ClearList[{a, c0[1], epsilon}] ;

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值