Supponiamo di aver bisogno di un algoritmo iterativo per l'ottimizzazione matematica. Ogni iterazione richiede un tempo lungo e casuale. Dopo ogni iterazione, viene controllata una condizione di arresto per l'iterate x , in base ad alcuni parametri predefiniti b . Un esempio è "Stop if || grad (x) || < b ", basato sul gradiente dell'obiettivo su x .
Ecco un "algoritmo" estremamente semplificato in pseudo-Scala
val f = (a: Dbl, b: Dbl) => {
def go(x: Dbl): Dbl = if (x<b) x
else go(bigComputation(x))
go(a)}
L'algoritmo attuale potrebbe essere ricorsivo o avere un ciclo while
.
L'utente desidera aggiornare il parametro di arresto b mentre l'algoritmo è in esecuzione. (La ragione potrebbe essere quella di accelerare la convergenza o migliorare le soluzioni, se un buon b è sconosciuto in anticipo.) Il cambiamento viene applicato quanto prima, tanto meglio - idealmente, alla successiva iterazione.
Q: Quale sarebbe una soluzione funzionale? Se tale aggiornamento è contro FP, qual è il meno cattivo design non FP? (Un piccolo risultato in termini di prestazioni va bene, se il codice è più pulito.)
C'è una discussione su un approccio FRP a link , che non lo risolve completamente al momento della scrittura.