1

关于赋值和变量的问题

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

现在我们想在另一个函数中使用这个数组:

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

然后我们评估

Fun[SP]

错误!输出将是一个错误,如:Set::write Tag SparseArray in ... is Protected.

那么在函数(非纯函数)中改变函数参数的正确方法是什么?如何创建类似的Part[]

也许像:

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

但这又是错误

4

2 回答 2

2

我认为一般应该避免使用 Chris Degnen 的方法。
Mathematica提供了一种更好的方法:Hold 属性

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}
于 2012-03-30T11:00:52.523 回答
0

你可以这样做:

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

{1、2、100、4、5}

于 2012-03-20T23:56:42.407 回答