Non sono sicuro che è un buon consiglio, ma:
f[m_] :=
Module[{iter}, getIter[] := iter;
Table[{iter, iter^2}, {iter, 1, m}]];
E poi:
Dynamic[getIter[]]
f[500000];
EDIT
Questo sarà meglio, ma un po 'più oscura:
ClearAll[f];
SetAttributes[f, HoldRest];
f[m_, monitorSymbol_: monitor] :=
Block[{monitorSymbol},
Module[{iter},
monitorSymbol := iter;
Table[{iter, iter^2}, {iter, 1, m}]]
];
Qui viene designato un determinato simbolo per monitorare lo stato della variabile localizzata. Utilizzando Block
, si assicura che il proprio simbolo non ottenga alcun valore globale alla fine (più precisamente, il suo valore globale non viene modificato alla fine - si può anche usare un simbolo che ha un valore globale, se lo si desidera). Il simbolo predefinito è monitor
, ma è possibile modificarlo. Ecco come lo si utilizza:
Dynamic[monitor]
f[500000];
Questo è un suggerimento un po 'meglio rispetto al primo più semplice, dal momento utilizzando Block
si garantisce che nessuna modifica di stato globali avvengono dopo la funzione termina.
fonte
2012-01-07 22:32:32
'Tabella' già scopa' iter', quindi in questo caso non vedo la necessità di includerlo nel primo argomento di 'Modulo'. Questo potrebbe non essere applicabile a funzioni più complicate, nel qual caso potresti prendere in considerazione l'uso di 'Block' invece di' Module'. –
@Brett Penso che sia un po 'più sottile, anche se in questo caso non riesco a trovare un esempio di uso costruttivo. Gli ambiti 'Table' dinamicamente, ma non scopre' iter' - circoscrive un simbolo 'Modulo' già generato come' iter $ 123' (può essere visto ad es. Con 'Trace'). Nel caso di 'Block', ci sono usi costruttivi per combinazioni come' Module [{sym}, Block [{sym}, ...]] ', per esempio come in questa risposta: http: // stackoverflow.it/questions/7394113/defining-a-function-with-an-optional-value-that-is-by-default-a-function-of-anot/7394668 # 7394668 –
@Leonid Sì, lo so nel codice sopra il 'iter' nella' Tabella 'è in realtà 'iter $ 123', il che rende complicato farvi riferimento al di fuori del' Modulo'. Il mio punto è che, in questo caso particolare, includere 'iter' come una variabile' Module' non è necessario, e in effetti rende le cose più difficili di quanto debbano essere. –