Mathematica AppendTo函数中的列表,即列表

时间:2017-06-12 14:53:59

标签: wolfram-mathematica

我正在尝试将值附加到列表中,我将其移交给函数,例如:

p = {{"Blaaaa"}};
AppendTo[p, {"Lalala"}];
dran [h_] := AppendTo[h, {"Hahaha"}]
dran[p]

但我收到以下错误:

AppendTo:{{Blaaaa},{Lalala}}不是带值的变量,因此无法更改其值。

我不明白。我的意思是我没有改变任何价值观。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

错误的原因是在mathematica默认情况下,函数args通过副本有效传递,不能修改。 AppendTo(与所有以To结尾的mathematica内在函数)实际上修改了它的参数。设置HoldFirst属性可以修改参数。

p = {{"Blaaaa"}};
SetAttributes[dran, HoldFirst]
dran[h_] := AppendTo[h, {"Hahaha"}]
dran[p]
  

{{" Blaaaa"},{" Hahaha"}}

请注意p本身已更改。

p
  

{{" Blaaaa"},{" Hahaha"}}

请注意,如果您尝试将此函数与文字参数一起使用,则会回到同一问题:

dran[{{"xyz"}}]
  

{{" xyz"}}不是带值的变量,因此无法更改其值

使用普通Append可能更好,它可以在没有HoldFirst的情况下工作,并保持输入参数不变。

p = {{"Blaaaa"}};
dran[h_] := Append[h, {"Hahaha"}]
dran[p]
p
  

{{" Blaaaa"},{" Hahaha"}}

     

{{" Blaaaa"}}