相关疑难解决方法(0)

关于在函数之间传递数据的简单问题

简单的问题,但我要求确保我不会忽视一个更有效的明显解决方案.

如果有一个大数据缓冲区,比如非常大的列表,需要更新,并希望将其传递给函数以在函数内部进行更新,如

a = Table[0,{10}]
a = update[a]
Run Code Online (Sandbox Code Playgroud)

并且因为我不能使用pass by reference(在CDF中,不能将函数的Atrributes更改为任何东西,例如HoldFirst),然后我被迫在函数内部按顺序复制列表更新它,并返回副本.

我的问题,除了使用不好的"全局变量"之外,还有更有效的方法吗?

PS.大约一年前,我通过引用询问了复制,这里是 我的Mathgroup问题的链接.(感谢Leonid回答btw,是有用的答案).

但我的问题在这里有点不同,因为现在我不能使用HoldFirst,还有其他任何我没有看到的替代方案,以避免这种额外的数据复制,它似乎会在程序变大时减慢程序的速度大.

(不能使用SetAttributes及其朋友,不允许使用CDF).

我将首先展示基本示例,然后展示如果我可以使用HoldFirst,我将如何做.

update[a_List] := Module[{copyOfa = a}, copyOfa[[1]] = 5; copyOfa]
a = Table[0, {10}];
a = update[a]

----> {5, 0, 0, 0, 0, 0, 0, 0, 0, 0}
Run Code Online (Sandbox Code Playgroud)

如果我可以使用HoldFirst,我会写

update[a_] := Module[{}, a[[1]] = 5; a]
Attributes[update] = {HoldFirst};

a = Table[0, {10}];
a = update[a]

----> {5, 0, 0, 0, 0, 0, 0, 0, 0, 0}
Run Code Online (Sandbox Code Playgroud)

效率更高,因为没有复制.通过引用传递.

我可以使用全局变量,如

a …
Run Code Online (Sandbox Code Playgroud)

wolfram-mathematica wolfram-cdf

9
推荐指数
2
解决办法
1424
查看次数

标签 统计

wolfram-cdf ×1

wolfram-mathematica ×1