这里是 Mathematica 13 中的一些有问题的代码:
In[132]:= M[d_] = Normal[SparseArray[{1, 1} -> d]]
Out[132]= {{d}}
In[133]:= M[1]
Out[133]= {{1}}
In[134]:= M[d_] = SparseArray[{1, 1} -> d]
Out[134]= {0}[{d}]
In[136]:= M[1] // Normal
Out[136]= {{d}}
嗨, 第一行按预期工作。 由于某些原因,第 [134] 行没有按我的预期工作...我希望在第 136 行中得到 {{1}}。非常令人困惑。 为什么 SparseArray 在调用时不替换函数参数的值? 谢谢你, 谢尔盖
可能是
SparseArray
范围中的错误。如果您查看其向下值,d
就在那里,但它没有接收输入 d
。
Clear[M]
M[d_] = SparseArray[{1, 1} -> d]
DownValues[M] // InputForm
{HoldPattern[M[d]] :> SparseArray[Automatic,{1,1},0,{1,{{0,1,{{1}}},{d}}]}
M[1] // Normal
{{d}}
SetDelayed
(:=)就没问题了
Clear[M]
M[d_] := SparseArray[{1, 1} -> d]
DownValues[M] // InputForm
{HoldPattern[M[d]] :> SparseArray[{1, 1} -> d]}
M[1] // Normal
{{1}}