- 积分
- 0
- 注册时间
- 2011-3-23
- 仿真币
-
- 最后登录
- 1970-1-1
|
使用局部变量是编写结构化程序的必要条件。
mmc的局部变量策略是每次调用时在变量名后加一个与调用次数相关的序数。
下面是我遇到的一个小问题,请大家一起分析。
In[1]:= myfunc[ee_]:=Module[
{exp=ee//Expand,pt,i},
pt=Cases[Level[exp,2],f[i_]->i];
pt//DeleteDuplicates]
In[2]:= aa={a(-f[-(1/2)]+f[1/2])+b (-f[-1]+f[1]),c (-f[-2]+f[2])+d (-f[-3]+f[3])};
In[3]:= Table[myfunc[aa[[ii]]],{ii,1,2}]
Out[3]= {{-1,-(1/2),1/2,1},{-3,-2,2,3}}
In[4]:= Table[myfunc[aa[[i]]],{i,1,2}]
Out[4]={1,2}
请大家注意3和4,显然4的结果不是我们想的。
两个的区别仅在于使用的循环变量分别是ii和i,
而后者恰与调用的子程序内的局部变量重名了!
这个错误的结果显然是因为外部的循环变量与
子程序内的局部变量出现了混淆。
想要避免这个问题也不是做不到,但是问题的
根本在于应该怎么理解其中的原因,我更想知
道是我对语法理解的不对或者是mmc本身的问
题。
请大家指导。 |
|