Передать функции в F # - PullRequest
       29

Передать функции в F #

7 голосов
/ 04 сентября 2008

Можно ли передать ссылку на функцию другой функции в F #? В частности, я хотел бы передать лямбда-функции, такие как

Фу (веселье х -> х ** 3)

Более конкретно, мне нужно знать, как я буду ссылаться на переданную функцию в функции, которую я написал сам.

Ответы [ 3 ]

5 голосов
/ 04 сентября 2008

Да, это возможно. инструкция имеет следующий пример:

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

val it : bool list
= [false; true; false; true; false]
2 голосов
/ 13 сентября 2008

Передача лямбда-функции в другую функцию работает следующим образом:

Предположим, у нас есть собственная тривиальная функция:

let functionThatTakesaFunctionAndAList f l = List.map f l

Теперь вы можете передать лямбда-функцию и список к ней:

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

Внутри нашей собственной функции functionThatTakesaFunctionAndAList вы можете просто ссылаться на лямбда-функцию как f, потому что вы вызвали свой первый параметр f.

Результат вызова функции, конечно:

float list = [1.0; 8.0; 27.0]
2 голосов
/ 04 сентября 2008

Функции являются гражданами первого класса в F #. Поэтому вы можете передавать их так, как хотите.

Если у вас есть такая функция:

let myFunction f =
    f 1 2 3

и f - функция, тогда возвращаемое значение myFunction равно f , примененное к 1,2 и 3.

...