La clé est de rappelez-vous que Dynamic ne contrôle rien sur l'évaluation directement. Ce qu'il fait est de créer un endroit sur l'écran qui a des propriétés d'évaluation.
Si, par exemple, vous deviez évaluer les éléments suivants dans une nouvelle Mathematica session ...
b=5;
Dynamic[a=b];
b=6;
Print[a];
... alors ce qui sera imprimé? Au lieu de l'évaluer immédiatement, pensez à avant de l'essayer. Astuce ... c'est une question piège, mais comprendre l'astuce va ouvrir votre esprit à exactement ce que fait Dynamic. La réponse, que je ne vais pas révéler ici (parce que vous devriez vraiment l'essayer pour vous-même!) Peut s'expliquer par le fait que la Dynamique n'a jamais fait quoi que ce soit car elle ne s'est jamais montrée à l'écran. Le point-virgule a inhibé l'apparition de Dynamic à l'écran , et sans apparaître à l'écran, l'évaluation de Dynamic n'aboutit à rien.
Plus subtilement, si vous supprimez tous les points-virgules, la déclaration d'impression [] (à moins sur ma machine) encore reste inchangé, mais maintenant pour une toute autre raison . C'est parce que le placement à l'écran d'un Dynamic garantit que son contenu sera évalué, mais pas quand ils seront évalués. Mon exemple met en place une condition de concurrence qui, au moins sur ma machine en v7, l'évaluation Maj + Entrée gagne.
Pour revenir à votre exemple,
Select[Range[1, 20], # > Dynamic[q] &]
Cela ne fonctionne pas la façon dont vous pensez qu'elle parce que la dynamique dans ce cas n'évalue pas à quelque chose qui est affiché à l'écran.
Vous pouvez trivialement démontrer le résultat en faisant ...
Dynamic[Select[Range[1, 20], # > q &]]
mais je suppose que vous étiez pas seulement intéressés à l'afficher sur l'écran, mais à mettre une sorte d'effet secondaire. Peut-être que vous étiez en train d'assigner Select à une variable. Il existe deux façons de provoquer ces effets secondaires. L'une est de les mettre dans le deuxième argument de Dynamic. Par exemple ...
findset[x_] := (myset = Select[Range[1, 20], # > x &])
Slider[Dynamic[q, (q=#; myset = findset[q])&], {1, 20}]
La seconde est de produire une dynamique qui fait une apparition à l'écran ont, mais qui ne se remarque pas. Par exemple,
Row[{
Slider[Dynamic[q], {1, 20}],
Dynamic[myset = Select[Range[1, 20], # > q &]; ""]
}]
Dans ce cas, Dynamic affiche actuellement. Il s'affiche juste à côté du curseur . Mais vous ne le voyez pas parce que ce qu'il affiche est une chaîne vide. Néanmoins, il possède toutes les propriétés de mise à jour automatique que n'importe quel Dynamic a.
Pour plus d'informations, vous devez lire les didacticiels dynamiques débutants et avancés dans la documentation de Mathematica. Vous pouvez également voir mon post sur comp.soft-sys.math.mathematica here (que j'ai partiellement reformulé pour cette réponse).
Eh bien, vous définissez x à 3, sans utiliser le curseur, et réjouissez-vous car le curseur se déplace. Maintenant, cela pourrait être intéressant, mais le but, ou l'espoir, de mon expérimentation était de changer le SET, comme je fais glisser le curseur. – nes1983
Si vous réévaluez l'instruction Select, sans le 'Dynamic', alors vous obtenez un nouvel ensemble. Si vous voulez que l'ensemble change tout seul ... je ne sais pas! – Eric