Tipo di domanda per principianti di programmazione funzionale qui:
Ho letto le trascrizioni di alcuni dei discorsi di Rich Hickey, e in molti dei suoi più noti, raccomanda di usare le code come alternativa alle funzioni che si chiamano l'un l'altro. (Ad esempio in Progettazione, composizione e prestazioni e in Semplice semplificato .)
Non lo capisco abbastanza, per un certo numero di aspetti:
-
Sta parlando di mettere i dati in una coda e poi farli utilizzare da ciascuna funzione? Quindi, invece della funzione Una funzione di chiamata B per eseguire il proprio calcolo, abbiamo semplicemente la funzione B eseguire lo slap del suo output su una coda e quindi avere la funzione A afferrarla? Oppure, in alternativa, stiamo parlando di mettere le funzioni in coda e poi applicarle successivamente ai dati (sicuramente no, perché ciò implicherebbe una mutazione massiccia, giusto? E anche la moltiplicazione delle code per le funzioni multi-arità, o come alberi o qualcosa del genere? )
-
In che modo ciò rende le cose più semplici? La mia intuizione sarebbe che questa strategia creerebbe più complessità, perché la coda sarebbe una sorta di stato, e quindi ti devi preoccupare "e se qualche altra funzione si intrufolasse e mettesse alcuni dati in cima alla coda?"
Una risposta a una domanda di implementazione su SO suggerisce che l'idea sta creando un sacco di code diverse. Quindi ogni funzione mette il suo output nella propria coda (??). Ma anche questo mi confonde, perché se si esegue una funzione una volta, allora perché ha bisogno di una coda per il suo output quando si può semplicemente prendere quell'output e schiaffare un nome su di esso come un (var, atom, entry in a big tabella hash, qualunque cosa). Al contrario, se una funzione è in esecuzione più volte e si configura l'output su una coda, si ha nuovamente lo stato su te stesso, e ci si deve preoccupare dell'ordine in cui tutto viene chiamato, le funzioni downstream diventano meno pure, ecc.
Chiaramente non sto capendo il punto qui. Qualcuno può spiegare un po '?