我对 Mathematica 对以下问题的回应感到困惑:
ClearAll[n]
#^2 & /@ Range[n]
#^2 & /@ Range[n] // StandardForm
看来连Mathematica(8.0)都不相信它刚才说的话:
#^2 & /@ Range[5]
Range[5^2]
对正在发生的事情有什么想法吗?
Edit:
这个问题的原始背景如下。我曾写过
PrimeOmega[Range[n]] - PrimeNu[Range[n]]
由于 n 将会非常大(2^50),我想我可以通过将其重写为来节省时间:
PrimeOmega[#] - PrimeNu[#] &/@Range[n]
现在回想起来,这或许不是一个好主意。 (我可以使用 Module 来“计算”范围一次。)
Since n
未定义,Range[n]
对自己的评价。所以,Map
就像作用于任何其他符号头一样作用于它,将你的函数映射到它的元素上 - 这里它只是n
In[11]:= #^2 & /@ someHead[n]
Out[11]= someHead[n^2]
EDIT
解决您编辑中的问题 - 对于数字n
, Range
评估为一个列表,你会得到预期的结果(即,Range[5]^2
。这完全取决于评估的顺序。要得到Range[5^2]
,你可以使用#^2&/@Unevaluated[Range[5]]
,在这种情况下,一切都会像符号一样发生n
多于) 。实际上,Range
对非数字输入发出错误消息。另外,它与问题无关,但功能如下#^2&
are Listable
,并且您不必映射它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)