Qual è un termine per iterare su molte funzioni con lo stesso input?

4

Quando chiamiamo la stessa funzione in un elenco di cose, la chiamiamo "mappa". Come lo chiamiamo quando chiamiamo un elenco di funzioni sugli stessi dati? Non intendo pipe - non alimentando l'output di ciascuna funzione a turno nella funzione successiva - ma semplicemente iterando su un elenco di funzioni, passando ciascuno allo stesso input?

    
posta Carl Manaster 04.01.2017 - 19:33
fonte

1 risposta

13

Non conosco alcun termine per la tua operazione, ma può essere visto come una sorta di mappatura, quindi forse non hai bisogno di un nome speciale per questo. Illustrerò questo in Haskell, ma è facile fare lo stesso in altre lingue, ad es. Python, Clojure, Javascript, ecc.

In haskell map ha tipo:

map :: (a -> b) -> [a] -> [b]

Ad esempio, puoi mappare length su un elenco di stringhe:

xs = ["Good", "morning", "world"] :: [String]

> map length xs
[4,7,5]

Ora supponiamo di avere un elenco di funzioni, ad es.

fs = [(+ 1), (* 5), (* 2)] :: [Int -> Int]

Come puoi applicare ciascuna funzione allo stesso numero, ad esempio 1 ? Puoi usare la funzione:

($) :: (a -> b) -> a -> b

Questa funzione prende un'altra funzione e la applica a un argomento. Se lo applichi parzialmente al numero 1 , ottieni:

($ 1) :: Num a => (a -> b) -> b

Questa è una funzione che ha una funzione da un tipo numerico a qualsiasi tipo b, la applica a 1 . Quindi, ora possiamo mappare ($ 1) sul nostro elenco di funzioni:

> map ($ 1) fs
[2,5,2]

Quindi, in generale, dato un input x :: a e un elenco di funzioni fs :: [a -> b] puoi applicare tutte le funzioni a x con map ($ x) fs , che ti dà un risultato di tipo [b] .

    
risposta data 04.01.2017 - 20:41
fonte

Leggi altre domande sui tag