Qual è la relazione tra i riduttori dei clojure e la fusione ciclica

3

Mi sono imbattuto in Clojure riduttori library.

Assomiglia molto al loop fusion. Tuttavia il termine non è menzionato da nessuna parte sulla pagina. C'è una differenza tra i due?

    
posta Simon 02.01.2014 - 10:35
fonte

1 risposta

5

La fusione loop è un'ottimizzazione in cui il compilatore nota che hai due loop separati che ripetono gli stessi valori, quindi fonde semplicemente i corpi del loop.

Ottieni riduttori quando dividi la classica piega / riduci l'implementazione in parti separate. In particolare, hai diviso la funzione di riduzione stessa (l'azione che prendi sull'accumulatore e il valore corrente) e il particolare schema di attraversamento.

Immagino che la ragione per cui hai pensato alla fusione ciclica sia che puoi combinare le funzioni di riduzione insieme, in modo che quando avviene effettivamente la riduzione (cioè, quando esegui effettivamente un'iterazione sui valori della raccolta), le riduzioni avvengono "insieme".

I corpi dei loop corrispondono alle funzioni di riduzione e il loop stesso corrisponde allo schema di attraversamento.

Una differenza importante è che le azioni che si svolgono all'interno dei loop non hanno alcuna relazione necessaria: potrebbero eseguire azioni completamente diverse. Con i riduttori, stai ancora mappando una raccolta su un risultato a (nel caso di reduce . Ovviamente per map stai mappando una collezione a una collezione ). È ancora una funzione che restituisce un singolo risultato.

    
risposta data 02.01.2014 - 11:22
fonte

Leggi altre domande sui tag