Passa funzioni in F#
-
09-06-2019 - |
Domanda
È possibile passare un riferimento a una funzione a un'altra funzione in F#?Nello specifico, mi piacerebbe passare funzioni lambda come
foo(divertimento x -> x**3)
Più specificamente, ho bisogno di sapere come mi riferirei alla funzione passata in una funzione che ho scritto io stesso.
Soluzione
Sì, è possibile.IL Manuale ha questo esempio:
> List.map (fun x -> x % 2 = 0) [1 .. 5];;
val it : bool list
= [false; true; false; true; false]
Altri suggerimenti
Le funzioni sono cittadini di prima classe in F#.Puoi quindi farli circolare come preferisci.
Se hai una funzione come questa:
let myFunction f =
f 1 2 3
E F è la funzione quindi il valore restituito di miaFunzione È F applicato a 1,2 e 3.
Passare una funzione lambda a un'altra funzione funziona in questo modo:
Supponiamo di avere una nostra funzione banale come segue:
let functionThatTakesaFunctionAndAList f l = List.map f l
Ora puoi passarle una funzione lambda e un elenco:
functionThatTakesaFunctionAndAList (fun x -> x ** 3.0) [1.0;2.0;3.0]
All'interno della nostra stessa funzione functionThatTakesaFunctionAndAList
puoi semplicemente fare riferimento alla funzione lambda come f
perché hai chiamato il tuo primo parametro f
.
Il risultato della chiamata di funzione è ovviamente:
float list = [1.0; 8.0; 27.0]