Pasar funciones en F#
-
09-06-2019 - |
Pregunta
¿Es posible pasar una referencia a una función a otra función en F#?Específicamente, me gustaría pasar funciones lambda como
foo(divertido x -> x ** 3)
Más específicamente, necesito saber cómo me referiría a la función pasada en una función que escribí yo mismo.
Solución
Sí, es posible.El manual tiene este ejemplo:
> List.map (fun x -> x % 2 = 0) [1 .. 5];;
val it : bool list
= [false; true; false; true; false]
Otros consejos
Las funciones son ciudadanas de primera clase en F#.Por lo tanto, puedes pasarlos como quieras.
Si tienes una función como esta:
let myFunction f =
f 1 2 3
y F es la función, entonces el valor de retorno de mifunción es F aplicado a 1, 2 y 3.
Pasar una función lambda a otra función funciona así:
Supongamos que tenemos una función trivial propia de la siguiente manera:
let functionThatTakesaFunctionAndAList f l = List.map f l
Ahora puede pasarle una función lambda y una lista:
functionThatTakesaFunctionAndAList (fun x -> x ** 3.0) [1.0;2.0;3.0]
Dentro de nuestra propia función functionThatTakesaFunctionAndAList
puedes referirte a la función lambda como f
porque llamaste a tu primer parámetro f
.
El resultado de la llamada a la función es por supuesto:
float list = [1.0; 8.0; 27.0]