Function Wolfram Mathematica中的作业

Function Wolfram Mathematica中的作业,function,wolfram-mathematica,variable-assignment,symbolic-math,sparse-array,Function,Wolfram Mathematica,Variable Assignment,Symbolic Math,Sparse Array,关于赋值和变量的问题 (* 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。。。受保护。 那么,在函数(非纯函数)中更改函数

关于赋值和变量的问题

(* 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。。。受保护。

那么,在函数(非纯函数)中更改函数参数的正确方法是什么?如何创建类似于
部分[]
的模拟

也许smth喜欢:

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

但这又是一个错误

您可以这样做:

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

{1,2100,4,5}

我认为克里斯·德格宁的方法通常应该避免使用。
Mathematica提供了一种更好的方法:

作为“纯函数”:


欢迎来到StackExchange!有一个新的StackExchange站点专门用于Mathematica,您可能会感兴趣。我肯定这是一个重复的问题,但我觉得很懒。
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}