Mi sembra che tutti questi siano correlati. Qual è la differenza?Piping, composizione e curring
risposta
tubazione viene utilizzata per eseguire una sequenza di operazioni su un certo valore (come tubazioni in Unix). L'input per ogni funzione è l'output della funzione precedente. Ovviamente questo richiede che ciascuna funzione prenda un singolo arg.
Composizione (
<<
/>>
) è simile dal fatto di prevedere due funzioni in sequenza (cioè, l'uscita del primo è l'ingresso al secondo), ma restituisce una funzione anziché immediatamente invocando la sequenza.Currying crea una nuova funzione applicando 1 a N -1 args ad una funzione di N args
Quindi, composizione e rifinizione vengono utilizzate per creare funzioni che viene utilizzato per tubazioni invocazione. La composizione e il curry differiscono nel modo in cui creano nuove funzioni (applicando args vs concatenamento).
Oltre a quanto scritto Daniel, v'è una stretta corrispondenza tra tubazione (i |>
e <|
operatori) e la composizione funzione (le >>
e <<
operatori).
Quando si utilizza tubazioni per passare alcuni dati ad un seqence di funzioni:
nums |> Seq.filter isOdd
|> Seq.map square
|> Seq.sum
... allora questo è equivalente a passare l'input ad una funzione ottenuto con funzione composizione:
let composed =
Seq.filter isOdd
>> Seq.map square
>> Seq.sum
composed nums
In pratica, ciò significa spesso che è possibile sostituire la dichiarazione di funzione che utilizza piping sull'argomento con una composizione di funzioni (e utilizzare il fatto che le funzioni possono essere utilizzate come valori). Ecco un esempio:
// Explicit function declaration
foo (fun x -> x |> bar |> goo)
// Equivalent using function composition
foo (bar >> goo)
- 1. Come fare curring con UnderscoreJS?
- 2. Piping popen stderr e stdout
- 3. Docker-composizione e PDB
- 4. Idioma Java per "piping"
- 5. Piping stdin to R
- 6. Piping find to find
- 7. Uscita piping per tagliare
- 8. Composizione funzione
- 9. Composizione regexp?
- 10. Bash: Piping Trova in Grep
- 11. implementazione di composizione e aggregazione in C#?
- 12. funzione di composizione e modulo funzionale
- 13. pigrizia e composizione delle funzioni (haskell, erlang)
- 14. C# Classi di amici e composizione OOP
- 15. Haskell Riscrivi regole e composizione delle funzioni
- 16. Composizione di una funzione Java e consumer
- 17. Composizione di modelli con Hiccup e Compojure
- 18. tuple e la funzione di composizione
- 19. Composizione di video e audio utilizzando AVMutableComposition
- 20. runST e la funzione di composizione
- 21. Valori "Piping" in variabili Bash
- 22. Piping file remoto in ExpressJS
- 23. posix_spawnp e piping output figlio a una stringa
- 24. Differenza tra piping HTTP e multiplexing HTTP con SPDY
- 25. python: ereditario o composizione
- 26. F #: composizione del motivo?
- 27. Funzione di composizione variabile?
- 28. Ottimizzazione html/modello Composizione
- 29. Nascondi durante la composizione
- 30. scala tipo tupla composizione
Avete qualche esempio che deve trovare un approccio appropriato? La tua domanda è abbastanza ampia. – pad
Questo potrebbe adattarsi maggiormente al sito SO dei "programmatori". –
Sono d'accordo con Pad: questa è una domanda abbastanza aperta (le risposte di Tomas e Daniel non reggono). –