Sto costruendo un algoritmo di clustering in C++, ma non mi occupo bene di OOP e dello stato delle variabili (dati dei membri) che cambiano. Per un algoritmo di una certa complessità, trovo questo un ostacolo al mio sviluppo.Simile all'accesso in C++ per riferimento?
Quindi, stavo pensando di cambiare il linguaggio di programmazione, in uno dei linguaggi funzionali: Ocaml o F #. Oltre a dover cambiare la mia mentalità su come affrontare la programmazione, c'è qualcosa che ho bisogno di chiarire. In C++, utilizzo una coda doppia per far scorrere una finestra di tempo attraverso i dati. Dopo un certo periodo di tempo, i dati più vecchi vengono rimossi e vengono aggiunti nuovi dati. I dati che non sono ancora troppo vecchi rimangono nella coda del doppio fine.
Un altro compito, più impegnativo, è confrontare le proprietà di uno di ciascun oggetto. Ogni oggetto è i dati di un certo periodo di tempo. E se ho un migliaio di oggetti dati in una determinata finestra temporale, ho bisogno di confrontarli tra nessuno o venti o trenta, a seconda. E alcune proprietà dell'oggetto confrontato potrebbero cambiare come risultato di questo confronto. In C++, faccio tutto usando i riferimenti, il che significa che accedo agli oggetti in memoria, che non vengono mai copiati, quindi l'algoritmo funziona alla massima velocità (per la mia conoscenza di C++).
Ho letto sulla programmazione funzionale e l'idea che ottengo è che ogni funzione esegue un'operazione e che i dati originali (l'input) non vengono modificati. Ciò significa che la lingua copia la struttura dei dati ed esegue la trasformazione richiesta. In tal caso, l'utilizzo della programmazione funzionale ritarderà notevolmente l'esecuzione dell'algoritmo. È corretto? Altrimenti, se esiste un modo rapido per eseguire la trasformazione dei dati, è possibile mostrarmi come farlo? Un esempio molto piccolo sarebbe fantastico.
Spero di avere qualche tipo di struttura. Ho letto che sia Ocaml che F # sono utilizzati in progetti di ricerca e scientifici.