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[]

多分smthのように:

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 に答える