Passer des fonctions en F#
-
09-06-2019 - |
Question
Est-il possible de passer une référence à une fonction à une autre fonction en F# ?Plus précisément, j'aimerais transmettre des fonctions lambda comme
foo(amusant x -> x ** 3)
Plus précisément, j'ai besoin de savoir comment je ferais référence à la fonction passée dans une fonction que j'ai moi-même écrite.
La solution
Oui c'est possible.Le manuel a cet exemple:
> List.map (fun x -> x % 2 = 0) [1 .. 5];;
val it : bool list
= [false; true; false; true; false]
Autres conseils
Les fonctions sont des citoyens de première classe en F#.Vous pouvez donc les faire circuler comme bon vous semble.
Si vous avez une fonction comme celle-ci :
let myFunction f =
f 1 2 3
et F est une fonction alors la valeur de retour de maFonction est F appliqué à 1,2 et 3.
Passer une fonction lambda à une autre fonction fonctionne comme ceci :
Supposons que nous ayons notre propre fonction triviale comme suit :
let functionThatTakesaFunctionAndAList f l = List.map f l
Vous pouvez maintenant lui passer une fonction lambda et une liste :
functionThatTakesaFunctionAndAList (fun x -> x ** 3.0) [1.0;2.0;3.0]
Dans notre propre fonction functionThatTakesaFunctionAndAList
vous pouvez simplement vous référer à la fonction lambda comme f
parce que tu as appelé ton premier paramètre f
.
Le résultat de l’appel de fonction est bien entendu :
float list = [1.0; 8.0; 27.0]