La chiave è per ricordare che Dynamic non controlla direttamente nulla sulla valutazione. Quello che fa è creare un punto sullo schermo che abbia proprietà di valutazione.
Se, ad esempio, si dovesse valutare la segue in un Mathematica sessione di fresco ...
b=5;
Dynamic[a=b];
b=6;
Print[a];
... allora ciò che verrà stampato? Invece di valutarlo immediatamente, pensa a prima di provarlo. Suggerimento ... è una domanda trabocchetto, ma capire il trucco ti aprirà la mente a ciò che sta facendo Dynamic.
La risposta, che non rivelerò qui (perché dovresti provarla davvero per !) Può essere spiegata dal fatto che la Dinamica non ha mai fatto nulla perché non si è mai mostrata sullo schermo. Il punto e virgola ha inibito l'aspetto di Dynamic su schermo e, senza apparire sullo schermo, la valutazione di Dynamic non ha effetto.
Più sottilmente, se si rimuove tutti i punti e virgola, di stampa [] dichiarazione (a almeno sulla mia macchina) ancora rimane invariato, ma ora per un motivo completamente diverso . Questo perché il posizionamento su schermo di una Dynamic garantisce che il suo contenuto sarà valutato, ma non quando sarà valutato. L'esempio imposta una condizione di competizione che, almeno sulla mia macchina in v7, vince la valutazione di spostamento + Invio di Shift + Invio.
Per tornare al tuo esempio,
Select[Range[1, 20], # > Dynamic[q] &]
Questo non funziona il modo di pensare lo fa perché la dinamica in questo caso non sta valutando a qualcosa che viene visualizzato sullo schermo.
Si potrebbe banalmente dimostrare il risultato facendo ...
Dynamic[Select[Range[1, 20], # > q &]]
ma darò per scontato che non eri solo interessati a visualizzarlo sullo schermo, ma nella creazione di una sorta di effetto collaterale. Forse stavi assegnando Seleziona a una variabile. Ci sono due modi per far accadere questi effetti collaterali. Uno è metterli nel secondo argomento di di Dinamico. Per esempio ...
findset[x_] := (myset = Select[Range[1, 20], # > x &])
Slider[Dynamic[q, (q=#; myset = findset[q])&], {1, 20}]
Il secondo è quello di produrre una dinamica che ha un aspetto sullo schermo, ma che non è evidente. Ad esempio,
Row[{
Slider[Dynamic[q], {1, 20}],
Dynamic[myset = Select[Range[1, 20], # > q &]; ""]
}]
In questo caso, la dinamica viene effettivamente visualizzata. Viene visualizzato accanto al dispositivo di scorrimento . Ma non lo vedi perché ciò che sta visualizzando è una stringa vuota. Tuttavia, ha tutte le proprietà di aggiornamento automatico di qualsiasi Dynamic.
Per ulteriori informazioni, è necessario leggere l'inizio e le esercitazioni dinamiche avanzate nella documentazione di Mathematica. Puoi anche vedere il mio post su comp.soft-sys.math.mathematica here (che ho in parte riformulato per questa risposta).
Bene, si imposta x su 3, senza utilizzare il cursore e si rallegra perché si muove il cursore. Ora, potrebbe essere interessante, ma l'obiettivo, o la speranza, della mia sperimentazione era cambiare il SET, mentre faccio scorrere il cursore. – nes1983
Se rivaluti l'istruzione Select, senza la 'Dinamica' al suo interno, ottieni un nuovo set. Se vuoi che il set cambi da solo ... Non lo so! – Eric