gpt4 book ai didi

wolfram-mathematica - 为什么这行不通?选择中的动态

转载 作者:行者123 更新时间:2023-12-04 00:05:45 26 4
gpt4 key购买 nike

好的,我这样做:

Select[Range[1, 20], # > Dynamic[q] &]

然后我创建 slider :
Slider[Dynamic[q], {1, 20}]

它总是会返回一个空集!为什么!

更新
这样做的目的是在我移动 slider 时更改设置。

最佳答案

关键是
请记住,Dynamic 不直接控制有关评估的任何内容。它的作用是在屏幕上创建一个具有评估属性的点。

例如,如果您要在新的 Mathematica 中评估以下内容
session ...

b=5;
Dynamic[a=b];
b=6;
Print[a];

...那么会打印什么?与其立即评估,不如考虑
在你尝试之前它。提示...这是一个技巧问题,但要了解技巧
将让您了解 Dynamic 正在做什么。

答案,我不会在这里透露(因为你真的应该尝试一下
你自己!)可以用动态从未做过任何事情的事实来解释
因为它从未出现在屏幕上。分号禁止屏幕显示
动态的外观,没有出现在屏幕上,动态的评价
一事无成。

更巧妙的是,如果删除所有分号,Print[] 语句(在
至少在我的机器上)仍然保持不变,但现在完全
不同的原因。那是因为动态保证的屏幕位置
它的内容将被评估,但不会在何时被评估。我的
示例设置了一个竞争条件,至少在我的 v7 机器上,
Shift+Enter 评估获胜。

回到你的例子,
Select[Range[1, 20], # > Dynamic[q] &]

这不像你想象的那样工作,因为在这种情况下是动态的
不评估屏幕上显示的内容。

你可以通过做简单地证明结果......
Dynamic[Select[Range[1, 20], # > q &]]

但我假设您不仅对在屏幕上显示它感兴趣,而且
在设置某种副作用。也许您正在将 Select 分配给一个变量。
有两种方法可以使这些副作用发生。一种是将它们放在
动态的第二个参数。例如...
findset[x_] := (myset = Select[Range[1, 20], # > x &])
Slider[Dynamic[q, (q=#; myset = findset[q])&], {1, 20}]

第二个是产生一个动态的,它确实有一个屏幕外观,但是一个
这是不明显的。例如,
Row[{
Slider[Dynamic[q], {1, 20}],
Dynamic[myset = Select[Range[1, 20], # > q &]; ""]
}]

在这种情况下,动态实际上正在显示。它显示在旁边
slider 。但是您看不到它,因为它显示的是一个空字符串。
尽管如此,它具有任何 Dynamic 所具有的所有自动更新属性。

有关更多信息,您应该阅读入门和高级动态教程
在 Mathematica 文档中。您还可以在 comp.soft-sys.math.mathematica here 上查看我的帖子(我为这个回应部分重新制定了)。

关于wolfram-mathematica - 为什么这行不通?选择中的动态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1179430/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com