1

關於產品分配和變量分配在沃爾弗拉姆的Mathematica

(* For example *) SP = SparseArray[{},5] or SP = Range[5] 

現在我們想用這個數組中的一些其他功能的工作:

(* example *) Fun[array_]:= array[[3]] = 100 ; (* set cell №3 equal to 100*) 

那麼我們EVAL

Fun[SP] 

錯誤!輸出將是一個錯誤,如:Set::write Tag SparseArray in ... is Protected.

那麼,什麼是改變函數的參數的函數(非純函數)的正確方法?如何creared類似的Part[]

也許不便,如:

Clear[f]; f[a_]:=Set[Symbol[a][[3]],100]; A =SparseArray[{},5]; f["A"]; 

但它再次錯誤

+0

歡迎StackExchange!有一個專門用於Mathematica的新的StackExchange站點,您可能會感興趣。 http://mathematica.stackexchange.com/ – magma 2012-03-25 08:17:54

+0

我確定這是一個重複的問題,但我感覺很懶。 – 2012-03-30 10:54:57

回答

2

我相信Chris Degnen的方法通常應該避免。
Mathematica提供了一個更好的方法:the Hold attributes

a = Range[5]; 

SetAttributes[fun, HoldFirst] 

fun[array_] := array[[3]] = 100 

fun[a]; 

a 
{1, 2, 100, 4, 5} 

作爲一個 「純函數」:

b = Range[5]; 

fun2 = Function[array, array[[3]] = 100, HoldFirst]; 

fun2[b]; 

b 
{1, 2, 100, 4, 5} 
0

你可以這樣說:

SP = Range[5]; 
Fun[array_] := array[[3]] = 100;(*set cell №3 equal to 100*) 
Fun[[email protected]]; 
SP 

{1,2,100,4,5}