2008-09-04 19 views
6

Est-il possible de transmettre une référence à une fonction à une autre fonction dans F #? Plus précisément, je voudrais passer des fonctions lambda commeFonctions de passe dans F #

foo (fun x -> x ** 3)

Plus précisément, je dois savoir comment je qualifierais la fonction passée dans une fonction que je m'a écrit.

Répondre

4

Oui, c'est possible. Le manual a cet exemple:

> List.map (fun x -> x % 2 = 0) [1 .. 5];; 

val it : bool list 
= [false; true; false; true; false] 
2

Les fonctions sont des citoyens de première classe en F #. Vous pouvez donc les faire circuler comme vous le souhaitez.

Si vous avez une fonction comme ceci:

let myFunction f = 
    f 1 2 3 

et f est fonction alors la valeur de retour de maFonction est f appliqué à 1,2 et 3.

+0

si vous voulez deux fonctions en entrée à maFonction? – Nulle

+1

Ensuite, laissez juste myFunction f1 f2 = ... – nickd

2

Passing une fonction lambda à une autre fonction fonctionne comme ceci:

Supposons que nous ayons une fonction triviale comme suit:

let functionThatTakesaFunctionAndAList f l = List.map f l 

Maintenant, vous pouvez passer une fonction lambda et une liste à elle:

functionThatTakesaFunctionAndAList (fun x -> x ** 3.0) [1.0;2.0;3.0] 

l'intérieur de notre propre fonction functionThatTakesaFunctionAndAList vous pouvez simplement se référer à la fonction lambda comme f parce que vous avez appelé votre premier paramètre f.

Le résultat de l'appel de fonction est bien sûr:

float list = [1.0; 8.0; 27.0]