找回密码
 注册
Simdroid-非首页
查看: 113|回复: 2

[基础概念] 关于局部变量的用法

[复制链接]
发表于 2011-3-30 19:50:58 | 显示全部楼层 |阅读模式 来自 四川
使用局部变量是编写结构化程序的必要条件。
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本身的问
题。

请大家指导。
发表于 2011-3-30 23:21:43 | 显示全部楼层 来自 黑龙江哈尔滨
Simdroid开发平台
本帖最后由 TBE_Legend 于 2011-3-30 23:24 编辑
使用局部变量是编写结构化程序的必要条件。
mmc的局部变量策略是每次调用时在变量名后加一个与调用次数相关的序数。

下面是我遇到的一个小问题,请大家一起分析。

In[1]:= myfunc[ee_]:=Module[
{exp=ee//Ex ...
lisonic 发表于 2011-3-30 19:50


--------------------------------------------------------------------------

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2011-5-21 01:31:07 | 显示全部楼层 来自 新疆
Mathematica effectively uses Block to set up local values for Table.
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-28 23:26 , Processed in 0.033449 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表