公告:1)网站程序升级:Q2A升级到1.8.6,Wordpress升级到5.7.2
2)修复了头像加载慢与提交问题反应慢等问题
2021-06-16

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

语法高亮:在编辑器中点击

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

支持LaTex数学公式
行内公式标识符:\$ 或“$\backslash ($”+“$\backslash )$”,
行间公式标识符:\$\$ 或 “$\backslash [$”+“$\backslash ]$”

社区建议QQ群:365716997

分类

+1 投票
752 浏览
(*程序预定计算i^2+m^2*)
i = Range[0, 10, 2];
m = Range[3];
m^2 + # & /@ (i^2)

上面以纯函数计算结果为:

{{1, 4, 9}, {5, 8, 13}, {17, 20, 25}, {37, 40, 45}, {65, 68, 
  73}, {101, 104, 109}}

 

下面FullForm作用表达式

Clear[i, m]
FullForm[m^2 + # & /@ (i^2)]

结果:

Power[Plus[i,Power[m,2]],Plus[2,Power[m,2]]]

即:

(i + m^2)^(2 + m^2)

与预定计算目标不同,请问该怎么理解?

有没有方法能查看程序内部运算过程,来帮助了解MMA内部运算?

如帮助文件中“标准运算过程”描述:

 
用户: keanhy (361 分)

2 个回答

+2 投票
 
已采纳
看计算过程可用Trace系函数。

你这个问题的答案很简单,如果没有Hold系属性的影响或Unevaluated的强制调节,函数的参数会在函数规则执行前先自动计算,也就是说,第一个例子里,i^2会首先计算成一个数表,而第二个例子里,i^2依旧是i^2,它的FullForm是Power[i, 2],不要忘了,Map这函数不光可用于列表,结果它把前面的纯函数Map到了Power的两个参数上,就成上面这样了。

这也是FullForm通常应配合Hold使用的原因之一……
用户: xzczd (2.2k 分)
采纳于 用户:keanhy
谢谢回答,采纳的晚了!
再问个小问题,
m^2 + # & /@ (i^2)  与  (m^2 + # &) /@ (i^2)
表达方式不同,有必要添加括号区分吗?
……我不太确定你说的“表达方式”不同是指啥。这两段代码是一样的啊,只不过后一段把代码按优先级括上了。这个算是习惯问题,加上也没什么不好吧,可以更轻松地看清优先级。
我想问的是优先级的问题....带后缀的表达式后缀的优先级最低吗?
后缀的优先级确实非常低,但是不是最低我一时说不上来。我不确定的时候一般都是直接N击代码确认一下优先级。
N击代码?数值检验一下吗?
鼠标左键点击一次叫单击,点击两次叫双击,点击很多很多次叫……
+2 投票

1. 有时候InputForm比FullForm好用。

2. 逻辑不对。你的代码明明应该这么写:

Clear[i, m]
InputForm[{m1, m2, m3}^2 + # & /@ ({i1, i2, i3}^2)]

 

用户: 苹果 (2.2k 分)
O(∩_∩)O谢谢回答!
...