Mathematica AppendTo 一个函数中的列表,它被传递给列表
Mathematica AppendTo a list in a function, which is handed the list
我正在尝试将一个值附加到列表,我将其交给函数,例如:
p = {{"Blaaaa"}};
AppendTo[p, {"Lalala"}];
dran [h_] := AppendTo[h, {"Hahaha"}]
dran[p]
但我收到以下错误:
AppendTo: {{Blaaaa},{Lalala}} 不是一个有值的变量,所以它的值不能改变。
我不明白。我的意思是我没有改变任何价值观。任何帮助将不胜感激。
错误的原因是在mathematica中默认情况下函数参数通过复制有效传递并且不能被修改。 AppendTo
(与所有以 To
结尾的数学内在函数一样)实际上修改了它的参数。设置 HoldFirst
属性可让您修改参数。
p = {{"Blaaaa"}};
SetAttributes[dran, HoldFirst]
dran[h_] := AppendTo[h, {"Hahaha"}]
dran[p]
{{"Blaaaa"}, {"Hahaha"}}
请注意 p
本身已更改。
p
{{"Blaaaa"}, {"Hahaha"}}
请注意,如果您尝试将此函数与文字参数一起使用,您会回到同样的问题:
dran[{{"xyz"}}]
{{"xyz"}} is not a variable with a value, so its value cannot be changed
使用普通的 Append
可能更好,它可以在没有 HoldFirst
的情况下工作并且保持输入参数不变。
p = {{"Blaaaa"}};
dran[h_] := Append[h, {"Hahaha"}]
dran[p]
p
{{"Blaaaa"}, {"Hahaha"}}
{{"Blaaaa"}}
我正在尝试将一个值附加到列表,我将其交给函数,例如:
p = {{"Blaaaa"}};
AppendTo[p, {"Lalala"}];
dran [h_] := AppendTo[h, {"Hahaha"}]
dran[p]
但我收到以下错误:
AppendTo: {{Blaaaa},{Lalala}} 不是一个有值的变量,所以它的值不能改变。
我不明白。我的意思是我没有改变任何价值观。任何帮助将不胜感激。
错误的原因是在mathematica中默认情况下函数参数通过复制有效传递并且不能被修改。 AppendTo
(与所有以 To
结尾的数学内在函数一样)实际上修改了它的参数。设置 HoldFirst
属性可让您修改参数。
p = {{"Blaaaa"}};
SetAttributes[dran, HoldFirst]
dran[h_] := AppendTo[h, {"Hahaha"}]
dran[p]
{{"Blaaaa"}, {"Hahaha"}}
请注意 p
本身已更改。
p
{{"Blaaaa"}, {"Hahaha"}}
请注意,如果您尝试将此函数与文字参数一起使用,您会回到同样的问题:
dran[{{"xyz"}}]
{{"xyz"}} is not a variable with a value, so its value cannot be changed
使用普通的 Append
可能更好,它可以在没有 HoldFirst
的情况下工作并且保持输入参数不变。
p = {{"Blaaaa"}};
dran[h_] := Append[h, {"Hahaha"}]
dran[p]
p
{{"Blaaaa"}, {"Hahaha"}}
{{"Blaaaa"}}