关键是
请记住,Dynamic 不直接控制有关评估的任何内容。它的作用是在屏幕上创建一个具有评估属性的点。
例如,如果您要在新的 Mathematica 中评估以下内容
会议...
b=5;
Dynamic[a=b];
b=6;
Print[a];
...那么会打印什么呢?不要立即评估,而是考虑一下
在你尝试之前。提示...这是一个技巧问题,但要理解其中的技巧
会让你对 Dynamic 正在做的事情敞开心扉。
答案,我不会在这里透露(因为你真的应该尝试一下)
你自己!)可以用以下事实来解释:Dynamic 从未执行过任何操作
因为它从未出现在屏幕上。分号抑制了屏幕上的显示
Dynamic的外观,以及不出现在屏幕上的Dynamic的评价
一事无成。
更巧妙的是,如果删除所有分号,Print[] 语句(位于
至少在我的机器上)still保持不变,但现在完全
不同的原因。那是因为动态的屏幕放置保证了
其内容将被评估,但不会when他们将受到评估。我的
示例设置了一个竞争条件,至少在我的 v7 机器上,
Shift+Enter 评估获胜。
回到你的例子,
Select[Range[1, 20], # > Dynamic[q] &]
这并不像你想象的那样工作,因为在这种情况下是动态的
不评估屏幕上显示的内容。
您可以通过执行以下操作来简单地演示结果...
Dynamic[Select[Range[1, 20], # > q &]]
但我假设您不仅对在屏幕上显示它感兴趣,而且
设置某种副作用。也许您正在将 Select 分配给一个变量。
有两种方法可以使这些副作用发生。一种是将它们放入
Dynamic 的第二个参数。例如...
findset[x_] := (myset = Select[Range[1, 20], # > x &])
Slider[Dynamic[q, (q=#; myset = findset[q])&], {1, 20}]
第二种是生成一个确实具有屏幕外观的 Dynamic,但是一个
这是不明显的。例如,
Row[{
Slider[Dynamic[q], {1, 20}],
Dynamic[myset = Select[Range[1, 20], # > q &]; ""]
}]
在这种情况下,实际上正在显示动态。它显示在
滑块。但您看不到它,因为它显示的是一个空字符串。
尽管如此,它还是具有任何 Dynamic 所具有的所有自动更新属性。
有关更多信息,您应该阅读入门和高级动态教程
在 Mathematica 文档中。您还可以在 comp.soft-sys.math.mathematica 上查看我的帖子here(我对此回应进行了部分重新表述)。