2017-06-12 40 views
2

我試圖將值追加到一個列表,其中我遞給功能,如:數學AppendTo列表的功能,這是流傳在列表

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

但我收到以下錯誤:

AppendTo:{{Blaaaa},{Lalala}}不是具有值的變量,所以其值無法更改。

我不明白。我的意思是我沒有改變任何價值。任何幫助將非常感激。

+0

我覺得這是很基本的,但我真的不明白這一點 – Nils

回答

2

錯誤的原因是,在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"}}

+0

啊非常感謝你,很好,其實我想改變我的輸入參數:DI會給這是一個嘗試,謝謝這麼多:) – Nils

+0

如果你想'p'被改變,我仍然會推薦使用'Append'形式,並執行'p = dran [p]',但這實際上是一種風格/偏好。 – agentp