рдХрд░реАрдиреЗ рдкрд░ рдПрдХ рдкрд┐рдЫрд▓реА рдкреЛрд╕реНрдЯ рдореЗрдВ, рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рдХреИрд╕реЗ рдХрдИ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдЫреЛрдЯреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЧрдгрд┐рддреАрдп рд░реВрдк рд╕реЗ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдЕрдиреНрдп рдХрд╛рд░рдг рд╣реИрдВ - рдпрд╣ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЖрдВрд╢рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдирд╛рдордХ рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рддрдХрдиреАрдХ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ ред рдпрд╣ рд╢реИрд▓реА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдмрд╣реБрдд рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЖрдВрд╢рд┐рдХ рдЙрдкрдпреЛрдЧ
рдЖрдВрд╢рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд╣рд▓реЗ рдПрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рд╢реЗрд╖ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдорд┐рд▓рддрд╛ рд╣реИред рдХрд░реАрдиреЗ рдХреА рдЪрд░реНрдЪрд╛ рд╕реЗ, рдХреЛрдИ рдпрд╣ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЖрдВрд╢рд┐рдХ рдЖрд╡реЗрджрди рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг:
// "" + 42 let add42 = (+) 42 // add42 1 add42 3 // // [1;2;3] |> List.map add42 // "" let twoIsLessThan = (<) 2 // twoIsLessThan 1 twoIsLessThan 3 // twoIsLessThan [1;2;3] |> List.filter twoIsLessThan // "" printfn let printer = printfn "printing param=%i" // printer [1;2;3] |> List.iter printer
рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдПрдХ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдВрд╢рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ:
// List.map let add1 = (+) 1 let add1ToEach = List.map add1 // "add1" List.map // add1ToEach [1;2;3;4] // List.filter let filterEvens = List.filter (fun i -> i%2 = 0) // // filterEvens [1;2;3;4]
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд, рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ "рдПрдореНрдмреЗрдбреЗрдб" рд╡реНрдпрд╡рд╣рд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рджреЛ рдирдВрдмрд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ рдПрдХ рд▓реЙрдЧрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рд▓реЗрддрд╛ рд╣реИ рдЬреЛ рдЗрди рдирдВрдмрд░реЛрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд▓реЙрдЧ рдХрд░реЗрдЧрд╛ред
- рд▓реЙрдЧрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ: (рд╕реНрдЯреНрд░рд┐рдВрдЧ) "рдирд╛рдо" рдФрд░ (рдЬреЗрдиреЗрд░рд┐рдХ) "рдореВрд▓реНрдп", рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░
string->'a->unit
ред - рдлрд┐рд░ рд╣рдо рд▓реЙрдЧрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдХрдВрд╕реЛрд▓ рд▓реЙрдЧрдЧрд░ рдпрд╛ рдкреЙрдк-рдЕрдк рдЖрдзрд╛рд░рд┐рдд рд▓реЙрдЧрд░ред
- рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдмрдВрдж рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред
// - let adderWithPluggableLogger logger xy = logger "x" x logger "y" y let result = x + y logger "x+y" result result // - let consoleLogger argName argValue = printfn "%s=%A" argName argValue // let addWithConsoleLogger = adderWithPluggableLogger consoleLogger addWithConsoleLogger 1 2 addWithConsoleLogger 42 99 // - let popupLogger argName argValue = let message = sprintf "%s=%A" argName argValue System.Windows.Forms.MessageBox.Show( text=message,caption="Logger") |> ignore // - let addWithPopupLogger = adderWithPluggableLogger popupLogger addWithPopupLogger 1 2 addWithPopupLogger 42 99
рдЗрди рдмрдВрдж-рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреА рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо 42 рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдВрд╢рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд╕реВрдЪреА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рд╕рд╛рдзрд╛рд░рдг add42
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдерд╛ред
// 42 let add42WithConsoleLogger = addWithConsoleLogger 42 [1;2;3] |> List.map add42WithConsoleLogger [1;2;3] |> List.map add42 //
рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рдЙрдкрдХрд░рдг рд╣реИрдВред рд╣рдо рд▓рдЪреАрд▓реЗ (рдпрджреНрдпрдкрд┐ рдЬрдЯрд┐рд▓) рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рдВрдХреНрд╢рдВрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рддрд╛рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рд╕реЗ рдЬрдЯрд┐рд▓рддрд╛ рдЫрд┐рдкреА рд╣реЛред
рдЖрдВрд╢рд┐рдХ рд╕рдорд╛рд░реЛрд╣ рдбрд┐рдЬрд╛рдЗрди
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдХреНрд░рдо рдЖрдВрд╢рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, List
рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдп рдЬреИрд╕реЗ List.map
рдФрд░ List.filter
рдХрд╛ рдПрдХ рд╕рдорд╛рди рд░реВрдк рд╣реИ, рдЕрд░реНрдерд╛рддреН:
List-function [function parameter(s)] [list]
рд╕реВрдЪреА рд╣рдореЗрд╢рд╛ рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрддреА рд╣реИред рдкреВрд░реНрдг рд░реВрдк рдореЗрдВ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг:
List.map (fun i -> i+1) [0;1;2;3] List.filter (fun i -> i>1) [0;1;2;3] List.sortBy (fun i -> -i ) [0;1;2;3]
рдЖрдВрд╢рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдорд╛рди рдЙрджрд╛рд╣рд░рдг:
let eachAdd1 = List.map (fun i -> i+1) eachAdd1 [0;1;2;3] let excludeOneOrLess = List.filter (fun i -> i>1) excludeOneOrLess [0;1;2;3] let sortDesc = List.sortBy (fun i -> -i) sortDesc [0;1;2;3]
рдпрджрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рддрд░реНрдХреЛрдВ рдХреЗ рдПрдХ рдЕрд▓рдЧ рдХреНрд░рдо рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЖрдВрд╢рд┐рдХ рдЖрд╡реЗрджрди рдмрд╣реБрдд рдХрдо рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред
рдЬрдм рдЖрдк рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдХреЛ рдХрдИ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдирдХреЗ рд╕рд░реНрд╡реЛрддреНрддрдо рдЖрджреЗрд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВред рд╕рднреА рдбрд┐рдЬрд╛рдЗрди рдореБрджреНрджреЛрдВ рдХреЗ рд╕рд╛рде, рдХреЛрдИ "рд╕рд╣реА" рдЙрддреНрддрд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдИ рдЖрдо рддреМрд░ рдкрд░ рд╕реНрд╡реАрдХреГрдд рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рд╣реИрдВред
- рдЙрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдЬреЛ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред
- рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдпрд╛ рд╕рдВрдЧреНрд░рд╣ (рдпрд╛ рдЕрдиреНрдп рдмрджрд▓рддреЗ рдкреИрд░рд╛рдореАрдЯрд░) рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рд░рд╣реЗрдВ
- рдШрдЯрд╛рд╡ рдЬреИрд╕реЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдмреЗрд╣рддрд░ рд╕рдордЭ рдХреЗ рд▓рд┐рдП, рдЕрдкреЗрдХреНрд╖рд┐рдд рдЖрджреЗрд╢ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ
рдкрд╣рд▓рд╛ рд╕рд┐рд░рд╛ рд╕рд░рд▓ рд╣реИред рдЖрдВрд╢рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рджреНрд╡рд╛рд░рд╛ "рдирд┐рд╢реНрдЪрд┐рдд" рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╡рд╛рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкрд╣рд▓реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд▓рдХрдбрд╝рд╣рд╛рд░реЗ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╣реИред
рджреВрд╕рд░реЗ рд╕рд┐рд░реЗ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рд╕реЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ рдСрдкрд░реЗрдЯрд░ рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рдКрдкрд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рджреЗрдЦрд╛ рд╣реИред
// let result = [1..10] |> List.map (fun i -> i+1) |> List.filter (fun i -> i>5)
рдЗрд╕реА рдкреНрд░рдХрд╛рд░, рд╕реВрдЪрд┐рдпреЛрдВ рдкрд░ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рдЖрд╕рд╛рдиреА рд╕реЗ рд░рдЪрдирд╛ рдХреЗ рд╕рдВрдкрд░реНрдХ рдореЗрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕реВрдЪреА рдкреИрд░рд╛рдореАрдЯрд░ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
let compositeOp = List.map (fun i -> i+1) >> List.filter (fun i -> i>5) let result = compositeOp [1..10]
рдЖрдВрд╢рд┐рдХ рдмреАрд╕реАрдПрд▓ рдлрд╝рдВрдХреНрд╢рди рд░реИрдкрд┐рдВрдЧ
рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (BCL) .NET рдХреЗ рдХрд╛рд░реНрдп F # рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реБрд▓рдн рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ F # рдЬреИрд╕реА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдзрд┐рдХрд╛рдВрд╢ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдбреЗрдЯрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрдмрдХрд┐ F # рдореЗрдВ рдбреЗрдЯрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЖрдорддреМрд░ рдкрд░ рдЕрдВрддрд┐рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рд░реИрдкрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, .NET рд╕реНрдЯреНрд░рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ рддрд╛рдХрд┐ рд▓рдХреНрд╖реНрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╣рд▓реЗ рдХреЗ рдмрдЬрд╛рдп рдЕрдВрддрд┐рдо рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП:
// .NET let replace oldStr newStr (s:string) = s.Replace(oldValue=oldStr, newValue=newStr) let startsWith lookFor (s:string) = s.StartsWith(lookFor)
рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдореАрдЯрд░ рдмрди рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣:
let result = "hello" |> replace "h" "j" |> startsWith "j" ["the"; "quick"; "brown"; "fox"] |> List.filter (startsWith "f")
рдпрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ:
let compositeOp = replace "h" "j" >> startsWith "j" let result = compositeOp "hello"
рдХрдиреНрд╡реЗрдпрд░ рдСрдкрд░реЗрдЯрд░ рдХреЛ рд╕рдордЭрдирд╛
рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрд╡рд╕рд╛рдп рдореЗрдВ рдПрдХ рдЖрдВрд╢рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
let (|>) xf = fx
рд╡рд╣ рдЬреЛ рдХрд░рддреА рд╣реИ, рдЙрд╕реЗ рдлрдВрдХреНрд╢рди рд╕реЗ рдкрд╣рд▓реЗ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд╛рдж рдореЗрдВ рдирд╣реАрдВред
let doSomething xyz = x+y+z doSomething 1 2 3 //
рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрдм рдлрд╝рдВрдХреНрд╢рди f
рдореЗрдВ рдХрдИ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдлрд╝рдВрдХреНрд╢рди f
рдХрд╛ рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдЗрдирдкреБрдЯ рдорд╛рди x
рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдлрд╝рдВрдХреНрд╢рди f
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ - рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдорд╛рди (рдЯреА x
)ред
рдпрд╣рд╛рдБ рдЖрдВрд╢рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдПрдХ рд╕рдорд╛рди рдЙрджрд╛рд╣рд░рдг рд╣реИред
let doSomething xy = let intermediateFn z = x+y+z intermediateFn // intermediateFn let doSomethingPartial = doSomething 1 2 doSomethingPartial 3 // 3 |> doSomethingPartial // ,
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реИ, рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдСрдкрд░реЗрдЯрд░ F # рдореЗрдВ рдмреЗрд╣рдж рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрдм рднреА рдЖрдк рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдХреБрдЫ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рдЖрдкрдХреЗ рд╕рд╛рдордиреЗ рдЖ рд╕рдХрддреЗ рд╣реИрдВ:
"12" |> int // "12" int 1 |> (+) 2 |> (*) 3 //
рд░рд┐рд╡рд░реНрд╕ рдХрдВрд╡рд╛рдпрд░ рдСрдкрд░реЗрдЯрд░
рд╕рдордп-рд╕рдордп рдкрд░, рдЖрдк рдЙрд▓рдЯрд╛ рдкрд╛рдЗрдк рд▓рд╛рдЗрди рдСрдкрд░реЗрдЯрд░ "<|" рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
let (<|) fx = fx
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреНрдпреЛрдВ рд╣реИ?
рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЙрд▓рдЯрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдиреНрдлрд┐рдХреНрд╕-рд╕реНрдЯрд╛рдЗрд▓ рдмрд╛рдЗрдирд░реА рдСрдкрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХреЛрд╖реНрдардХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреЛрдб рдХреНрд▓реАрдирд░ рдмрди рдЬрд╛рддрд╛ рд╣реИред
printf "%i" 1+2 // printf "%i" (1+2) // printf "%i" <| 1+2 //
рдЖрдк рдЫрджреНрдо рдЗрдиреНрдлрд┐рдХреНрд╕ рдЕрдВрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдореЗрдВ рджреЛ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдХрдиреНрд╡реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
let add xy = x + y (1+2) add (3+4) // 1+2 |> add <| 3+4 //
рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд╕рд╛рдзрди
F # рдХреЗ рд▓рд┐рдП рдХрдИ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ C # рдпрд╛ Java рдЕрдиреБрднрд╡ рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдВрдХ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк F # рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ:
F # рд╕реАрдЦрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдХрдИ рдЕрдиреНрдп рддрд░реАрдХреЗ рднреА рд╡рд░реНрдгрд┐рдд рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ, рдПрдл # рд╕рдореБрджрд╛рдп рдмрд╣реБрдд рд╢реБрд░реБрдЖрддреА рдЕрдиреБрдХреВрд▓ рд╣реИред рд╕реНрд▓реИрдХ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╕рдХреНрд░рд┐рдп рдЪреИрдЯ рд╣реИ, рдПрдл # рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдлрд╛рдЙрдВрдбреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рд╢реБрд░реБрдЖрддреА рдХрдорд░реЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛ рдЖрдк рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ ред рд╣рдо рджреГрдврд╝рддрд╛ рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ!
рд░реВрд╕реА рднрд╛рд╖реА рд╕рдореБрджрд╛рдп F # рдХреА рд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рдирд╛ рди рднреВрд▓реЗрдВ! рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рднрд╛рд╖рд╛ рд╕реАрдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЙрдирд╕реЗ рдЪреИрдЯ рд░реВрдо рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА:
рдЕрдиреБрд╡рд╛рдж рд▓реЗрдЦрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
@Kleidemos рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╡рд╛рджрд┐рдд
рдЕрдиреБрд╡рд╛рдж рдФрд░ рд╕рдВрдкрд╛рджрдХреАрдп рдкрд░рд┐рд╡рд░реНрддрди рдПрдл # рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд░реВрд╕реА рднрд╛рд╖реА рд╕рдореБрджрд╛рдп рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рд╕реЗ рдХрд┐рдП рдЧрдП рдереЗред рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП рдЗрд╕ рд▓реЗрдЦ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо @schvepsss рдФрд░ @ рд╢рд╛рд╡рд░ рдХрд╛ рднреА рд╢реБрдХреНрд░рд┐рдпрд╛ рдЕрджрд╛ рдХрд░рддреЗ рд╣реИрдВ ред