我想在演示文稿中显示一些动态内容.但是,我不确定到星期四我有时间在Mathematica中以我想要的方式制作幻灯片.
是否可以在A Powerpoint(Microsoft)或Keynote(Apple)演示文稿中使用Mathematica构建动态对象?
wolfram-mathematica mathematica-8 mathematica-cdf wolfram-cdf
简单的问题,但我要求确保我不会忽视一个更有效的明显解决方案.
如果有一个大数据缓冲区,比如非常大的列表,需要更新,并希望将其传递给函数以在函数内部进行更新,如
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)