我試圖將值追加到一個列表,其中我遞給功能,如:數學AppendTo列表的功能,這是流傳在列表
p = {{"Blaaaa"}};
AppendTo[p, {"Lalala"}];
dran [h_] := AppendTo[h, {"Hahaha"}]
dran[p]
但我收到以下錯誤:
AppendTo:{{Blaaaa},{Lalala}}不是具有值的變量,所以其值無法更改。
我不明白。我的意思是我沒有改變任何價值。任何幫助將非常感激。
我試圖將值追加到一個列表,其中我遞給功能,如:數學AppendTo列表的功能,這是流傳在列表
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"}}
我覺得這是很基本的,但我真的不明白這一點 – Nils