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}