2008-09-04 33 views
6

Có thể chuyển một tham chiếu đến một hàm đến một hàm khác trong F # không? Cụ thể, tôi muốn vượt qua các hàm lambda nhưCác chức năng truyền trong F #

foo (fun x -> x ** 3)

Cụ thể hơn, tôi cần phải biết làm thế nào tôi sẽ đề cập đến các chức năng thông qua vào một chức năng mà tôi đã tự viết.

Trả lời

4

Có, điều đó là có thể. manual có ví dụ này:

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

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

Chức năng là công dân hạng nhất trong F #. Do đó, bạn có thể vượt qua chúng xung quanh giống như bạn muốn.

Nếu bạn có một chức năng như thế này:

let myFunction f = 
    f 1 2 3 

f là chức năng thì giá trị trở lại của myFunctionf áp dụng cho 1,2 và 3.

+0

gì xảy ra nếu bạn muốn hai chức năng như là đầu vào để myFunction? – Nulle

+1

Sau đó, chỉ cần để myFunction f1 f2 = ... – nickd

2

Passing hàm lambda cho hàm khác hoạt động như sau:

Giả sử chúng ta có một chức năng tầm thường như sau:

let functionThatTakesaFunctionAndAList f l = List.map f l 

Bây giờ bạn có thể vượt qua một hàm lambda và một danh sách với nó:

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

Bên chức năng riêng của chúng tôi functionThatTakesaFunctionAndAList bạn chỉ có thể tham khảo các chức năng lambda như f vì bạn gọi là tham số đầu tiên của bạn f.

Kết quả của các cuộc gọi chức năng là tất nhiên:

float list = [1.0; 8.0; 27.0] 
Các vấn đề liên quan