Passe funções em F#
-
09-06-2019 - |
Pergunta
É possível passar de uma referência a uma função para outra função em F#?Especificamente, eu gostaria de passar lambda funções como
foo(fun x -> x ** 3)
Mais especificamente, eu preciso saber como eu iria referir-se ao passado de função em uma função que eu escrevi a mim mesmo.
Solução
Sim, é possível.O manual tem este exemplo:
> List.map (fun x -> x % 2 = 0) [1 .. 5];;
val it : bool list
= [false; true; false; true; false]
Outras dicas
Funções de primeira classe de cidadãos em F#.Portanto, você pode passá-los em torno de como você deseja.
Se você tiver uma função como esta:
let myFunction f =
f 1 2 3
e f é função, em seguida, o valor de retorno de myFunction é f aplicada a 1,2 e 3.
Passando uma função lambda para outra função funciona assim:
Suponha que nós temos um trivial função de nossas próprias da seguinte forma:
let functionThatTakesaFunctionAndAList f l = List.map f l
Agora você pode passar uma função lambda e uma lista para ele:
functionThatTakesaFunctionAndAList (fun x -> x ** 3.0) [1.0;2.0;3.0]
No interior de nossa própria função functionThatTakesaFunctionAndAList
você pode apenas referir-se à função lambda como f
porque você chamou o seu primeiro parâmetro f
.
O resultado da chamada de função é do curso:
float list = [1.0; 8.0; 27.0]