рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╕реЛрдЪред рднрд╛рдЧ рек

рдмреБрдирд┐рдпрд╛рджреА рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╡рд┐рд╖рдпрд╛рдВрддрд░ рдХреЗ рдмрд╛рдж, рд╣рдо рдлрд┐рд░ рд╕реЗ рдХрд╛рд░реНрдп рдкрд░ рд▓реМрдЯ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХреА рдЧрдИ рдкрд╣реЗрд▓реА рдХреЗ рд▓рд┐рдП: рдпрджрд┐ рдХреЛрдИ рдЧрдгрд┐рддреАрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рддреЛ F # рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЕрдзрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреИрд╕реЗ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ? рдХрдЯреМрддреА рдХреЗ рддрд╣рдд рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА!




рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рдХрдИ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗрд╡рд▓ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИред рд╕рдВрдХрд▓рдХ рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ " рдХрд░реА " рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд╕реНрдХреЗрд▓ рдХрд░реА рдХреЗ рд╕рдореНрдорд╛рди рдореЗрдВ, рдПрдХ рдЧрдгрд┐рддрдЬреНрдЮ, рдЬрд┐рд╕рдиреЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдХрд╛рдлреА рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ред


рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдХрд░реА рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ рджреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ:


//   let printTwoParameters xy = printfn "x=%iy=%i" xy 

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕реЗ рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:


 //    let printTwoParameters x = //    let subFunction y = printfn "x=%iy=%i" xy //  ,    subFunction //   

рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:


  1. " printTwoParameters " рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди printTwoParameters , рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реБрдП: "x"ред
  2. рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ: "y"ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕реНрдерд╛рдиреАрдп рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ "x" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди x рдХреЛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред "x" рдЗрд╕ рддрд░рд╣ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реИ рдХрд┐ рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдЗрд╕реЗ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
  3. рдЕрдВрдд рдореЗрдВ, рдирдпрд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╕реНрдерд╛рдиреАрдп рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред
  4. рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдлрд┐рд░ "y" рддрд░реНрдХ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдкреИрд░рд╛рдореАрдЯрд░ "x" рдЗрд╕рдореЗрдВ рдмрдВрдж рд╣реИ рддрд╛рдХрд┐ рд▓реМрдЯреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдкрдирд╛ рддрд░реНрдХ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдкреИрд░рд╛рдореАрдЯрд░ "y" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред

рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛, рд╕рдВрдХрд▓рдХ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, " printTwoParameters " рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рджреЛ рдХреЗ рдмрдЬрд╛рдп рдХреЗрд╡рд▓ рдПрдХ рддрд░реНрдХ рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 //     printTwoParameters 1 //    val it : (int -> unit) = <fun:printTwoParameters@286-3> 

рдпрджрд┐ рд╣рдо рдЗрд╕реЗ рдПрдХ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреА - рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рддреЛ, рдпрд╣рд╛рдБ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм printTwoParameters рдХреЛ рджреЛ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:


  • printTwoParameters рдХреЛ рдкрд╣рд▓реЗ рддрд░реНрдХ (x) рдХреЗ рд╕рд╛рде printTwoParameters
  • printTwoParameters рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ "x" рдмрдВрдж рд╣реИред
  • рдлрд┐рд░ рджреВрд╕рд░реЗ рддрд░реНрдХ (y) рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ

рдпрд╣рд╛рдБ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:


 //   let x = 6 let y = 99 let intermediateFn = printTwoParameters x //  -  // x   let result = intermediateFn y //     let result = (printTwoParameters x) y //   let result = printTwoParameters xy 

рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ:


 //  let addTwoParameters xy = x + y //   let addTwoParameters x = //   ! let subFunction y = x + y //      subFunction //   //       let x = 6 let y = 99 let intermediateFn = addTwoParameters x //  -  // x   let result = intermediateFn y //   let result = addTwoParameters xy 

рдлрд┐рд░, рдПрдХ "рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп" рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬреЛ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдлрд╝рдВрдХреНрд╢рди рджреЗрддрд╛ рд╣реИред


рд▓реЗрдХрд┐рди рд░реБрдХреЛ, + рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдХреНрдпрд╛ рдпрд╣ рдмрд╛рдЗрдирд░реА рдСрдкрд░реЗрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП? рдирд╣реАрдВ, рдпрд╣ рднреА рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреА рддрд░рд╣, рдХрд░реА рд╣реИред рдпрд╣ " + " рдирд╛рдордХ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдКрдкрд░ рджрд┐рдП рдЧрдП addTwoParameters рддрд░рд╣ рдПрдХ рдирдпрд╛ рдордзреНрдпрд╡рд░реНрддреА рдлрд╝рдВрдХреНрд╢рди рджреЗрддрд╛ рд╣реИред


рдЬрдм рд╣рдо рдПрдХреНрд╕рдкреНрд░реЗрд╢рди x+y рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛрдб рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд░реАрдХреНрд░рд┐рдПрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ infix рдХреЛ (+) xy рдХрдиреНрд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдПрдХ рдлрдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╣реИ + рдЬреЛ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ "+" рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрд╖реНрдардХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдирд┐рдпрдорд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдПрдХ infix рдСрдкрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВред


рдЕрдВрдд рдореЗрдВ, рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рд╡рд╛рд▓рд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди, рдЬрд┐рд╕реЗ + рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЛ рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреА рддрд░рд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред


 //         let x = 6 let y = 99 let intermediateFn = (+) x //   ""  ""   let result = intermediateFn y //        let result = (+) xy //       let result = x + y 

рдФрд░ рд╣рд╛рдВ, рдпрд╣ рдЕрдиреНрдп рд╕рднреА рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ printf рдЬреИрд╕реЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред


 //    let result = 3 * 5 //    - let intermediateFn = (*) 3 //  ""  3   let result = intermediateFn 5 //    printfn let result = printfn "x=%iy=%i" 3 5 // printfn   - let intermediateFn = printfn "x=%iy=%i" 3 // "3"   let result = intermediateFn 5 

рдХрд░реА рдлрдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░


рдЕрдм рдЬрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдЙрдирдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреНрдпрд╛ рджрд┐рдЦреЗрдВрдЧреЗред


рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд▓реМрдЯрддреЗ рд╣реБрдП, " printTwoParameter ", рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдиреЗ рдПрдХ рддрд░реНрдХ рд▓рд┐рдпрд╛ рдФрд░ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдлрд╝рдВрдХреНрд╢рди рд▓реМрдЯрд╛рдпрд╛ред рдордзреНрдпрд╡рд░реНрддреА рдлрд╝рдВрдХреНрд╢рди рдиреЗ рднреА рдПрдХ рддрд░реНрдХ рд▓рд┐рдпрд╛ рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓реМрдЯрд╛рдпрд╛ (рдЕрд░реНрдерд╛рдд unit )ред рдЗрд╕рд▓рд┐рдП, рдордзреНрдпрд╡рд░реНрддреА рдХрд╛рд░реНрдп рдкреНрд░рдХрд╛рд░ int->unit ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдбреЛрдореЗрди printTwoParameters int , рдФрд░ рд░реЗрдВрдЬ int->unit ред рдЗрд╕реЗ рдПрдХ рд╕рд╛рде рд░рдЦрдХрд░ рд╣рдо рдЕрдВрддрд┐рдо рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рджреЗрдЦреЗрдВрдЧреЗ:


 val printTwoParameters : int -> (int -> unit) 

рдпрджрд┐ рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд░реА рдЧрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рдХреЛрд╖реНрдардХ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдПрдХ рд╕рд╛рдзрд╛рд░рдг, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд░реА рдЧрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдИ рдмреНрд░реИрдХреЗрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛:


 val printTwoParameters : int -> int -> unit 

рдмреНрд░реИрдХреЗрдЯ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВред рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреА рдзрд╛рд░рдгрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рджрд┐рдорд╛рдЧ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдФрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреНрдпрд╛ рд╣реИ рдЬреЛ рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдПрдХ рдирд┐рдпрдорд┐рдд рдлрд╝рдВрдХреНрд╢рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ?


рдпрд╣рд╛рдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд╣реИ рдЬреЛ рдПрдХ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рджреЗрддрд╛ рд╣реИ:


 let add1Param x = (+) x // signature is = int -> (int -> int) 

рдФрд░ рдпрд╣рд╛рдВ рджреЛ рдорд╛рдирджрдВрдб рд╣реИрдВ рдЬреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ:


 let add2Params xy = (+) xy // signature is = int -> int -> int 

рдЙрдирдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдереЛрдбрд╝реЗ рдЕрд▓рдЧ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдирдХреЗ рдмреАрдЪ рдмрд╣реБрдд рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рдЗрд╕ рддрдереНрдп рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХрд┐ рджреВрд╕рд░рд╛ рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд░реА рд╣реИред


рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп


рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд░реАрдХрд░рдг рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдЙрд╕реА рддрд░рд╣: рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП, рдЕрдВрддрд┐рдо рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдлрд╝рдВрдХреНрд╢рди рджреЗрддрд╛ рд╣реИ рдЬреЛ рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред


рдЗрд╕ рдХрдард┐рди рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдореИрдВрдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░ рдШреЛрд╖рд┐рдд рдХрд┐рдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред


 let multiParamFn (p1:int)(p2:bool)(p3:string)(p4:float)= () //   let intermediateFn1 = multiParamFn 42 // multoParamFn  int   (bool -> string -> float -> unit) // intermediateFn1  bool //   (string -> float -> unit) let intermediateFn2 = intermediateFn1 false // intermediateFn2  string //   (float -> unit) let intermediateFn3 = intermediateFn2 "hello" // intermediateFn3 float //     (unit) let finalResult = intermediateFn3 3.141 

рдкреВрд░реЗ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░:


 val multiParamFn : int -> bool -> string -> float -> unit 

рдФрд░ рдордзреНрдпрд╡рд░реНрддреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░:


 val intermediateFn1 : (bool -> string -> float -> unit) val intermediateFn2 : (string -> float -> unit) val intermediateFn3 : (float -> unit) val finalResult : unit = () 

рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЖрдкрдХреЛ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХрд┐рддрдиреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ: рдмрд╕ рдХреЛрд╖реНрдардХ рдХреЗ рдмрд╛рд╣рд░ рддреАрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВред рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдпрд╛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЕрдзрд┐рдХ рддреАрд░ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╡реЗ рдХреЛрд╖реНрдардХ рдореЗрдВ рд╣реЛрдВрдЧреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ:


 int->int->int // 2  int  int string->bool->int //   string,  - bool, //  int int->string->bool->unit //   (int,string,bool) //    (unit) (int->string)->int //   ,  // ( int  string) //   int (int->string)->(int->bool) //   (int  string) //   (int  bool) 

рдПрдХрд╛рдзрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХрдард┐рдирд╛рдЗрдпрд╛рдБ


рдЬрдм рддрдХ рдЖрдк рдХрд░реАрдиреЗ рдХреЗ рдкреАрдЫреЗ рдХреЗ рддрд░реНрдХ рдХреЛ рдирд╣реАрдВ рд╕рдордЭреЗрдВрдЧреЗ, рдпрд╣ рдХреБрдЫ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛ред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдЕрдкреЗрдХреНрд╖рд╛ рд╕реЗ рдХрдо рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдЪрд▓рд╛рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреАред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдлрд╝рдВрдХреНрд╢рди рдорд┐рд▓рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рддрдм рдЙрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдореВрд▓реНрдп рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ, рддреЛ рдЖрдк рд╕рдВрдХрд▓рдХ рд╕реЗ рдПрдХ рдЕрд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рд╣рд╛рдирд┐рд░рд╣рд┐рдд рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:


 //   let printHello() = printfn "hello" 

рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдП рдЧрдП рдЕрдиреБрд╕рд╛рд░ рдХрд░реЗрдВрдЧреЗ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдХрдВрд╕реЛрд▓ рдореЗрдВ "рд╣реИрд▓реЛ" рдкреНрд░рд┐рдВрдЯ рд╣реЛрдЧрд╛? рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рдкрд╣рд▓реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рд╕рдВрдХреЗрдд: рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рджреЗрдЦреЗрдВред


 //   printHello 

рдЙрдореНрдореАрджреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдХреЛрдИ рдХреЙрд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди unit рдХреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрд┐рдирд╛ рддрд░реНрдХ рдХреЗ)ред


рдЗрд╕ рдорд╛рдорд▓реЗ рдХрд╛ рдХреНрдпрд╛? рдХреНрдпрд╛ рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?


 let addXY xy = printfn "x=%iy=%i" x x + y 

рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдХрд▓рдХ printfn рд╕рд╛рде рд▓рд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░реЗрдЧрд╛ред


 printfn "x=%iy=%i" x //^^^^^^^^^^^^^^^^^^^^^ //warning FS0193: This expression is a function value, ie is missing //arguments. Its type is ^a -> unit. 

рдпрджрд┐ рдХрд░реАрдиреЗ рдХреА рдХреЛрдИ рд╕рдордЭ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрджреЗрд╢ рдмрд╣реБрдд рдЧреВрдврд╝ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреЛ рдХрд┐ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ "рд▓реЗрдЯ" рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рд╕реА рдЪреАрдЬ рд╕реЗ рдмрдВрдзреЗ рд╣реИрдВ) рдХрд╛ unit рдореВрд▓реНрдп рдореЗрдВ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ unit рдореВрд▓реНрдп рдореЗрдВ рдЧрдгрдирд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рджреЗрддрд╛ рд╣реИред рдпрд╣ рдХрд╣рдиреЗ рдХрд╛ рдПрдХ рд▓рдВрдмрд╛ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ printfn рдПрдХ рддрд░реНрдХ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реИред


рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, .NET рджреБрдирд┐рдпрд╛ рдХреЗ рдХрд┐рд╕реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, TextReader рд╡рд░реНрдЧ рдХреА Readline рд╡рд┐рдзрд┐ рдХреЛ рдПрдХ unit рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк рдЕрдХреНрд╕рд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрд╖реНрдардХ рдирд╣реАрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЛ "рдХреЙрд▓" рдХреЗ рд╕рдордп рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рддрдм рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ рдЬрдм рдЖрдк рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред


 let reader = new System.IO.StringReader("hello"); let line1 = reader.ReadLine // ,    printfn "The line is %s" line1 //    // ==> error FS0001: This expression was expected to have // type string but here has type unit -> string let line2 = reader.ReadLine() // printfn "The line is %s" line2 //   

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ, line1 рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрдХреЗрддрдХ рдпрд╛ Readline рдкрджреНрдзрддрд┐ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реИ, рди рдХрд┐ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред reader.ReadLine() рдореЗрдВ рдЙрдкрдпреЛрдЧ () ред reader.ReadLine() рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред


рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рдХрд▓реНрдк


рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЧреБрдкреНрдд рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред printf рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг:


 printfn "hello" 42 // ==> error FS0001: This expression was expected to have // type 'a -> 'b but here has type unit printfn "hello %i" 42 43 // ==> Error FS0001: Type mismatch. Expecting a 'a -> 'b -> 'c // but given a 'a -> unit printfn "hello %i %i" 42 43 44 // ==> Error FS0001: Type mismatch. Expecting a 'a->'b->'c->'d // but given a 'a -> 'b -> unit 

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдВрдкрд╛рдЗрд▓рд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рддреАрди рдорд╛рдкрджрдВрдбреЛрдВ рд╡рд╛рд▓рд╛ рдПрдХ рдкреНрд░рд╛рд░реВрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ (рд╣рд╕реНрддрд╛рдХреНрд╖рд░ 'a -> 'b -> 'c -> 'd рдореЗрдВ рддреАрди рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ), рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рджреЛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИ (рд╣рд╕реНрддрд╛рдХреНрд╖рд░ 'a -> 'b -> unit рджреЛ рдкреИрд░рд╛рдореАрдЯрд░)ред


рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ printf рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЧрдгрдирд╛ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЪрд░рдг рдореЗрдВ, рдПрдХ рд╕рд░рд▓ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред рд╕рдВрдХрд▓рдХ рдирд╛рд░рд╛рдЬрдЧреА рдЬрддрд╛рдПрдЧрд╛ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдореВрд▓реНрдп рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИред


 let add1 x = x + 1 let x = add1 2 3 // ==> error FS0003: This value is not a function // and cannot be applied 

рдпрджрд┐ рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рдордзреНрдпрд╡рд░реНрддреА рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдХреЙрд▓ рдХреЛ рддреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдерд╛, рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реЛ рд░рд╣рд╛ рд╣реИред


 let add1 x = x + 1 let intermediateFn = add1 2 //   let x = intermediateFn 3 //intermediateFn  ! // ==> error FS0003: This value is not a function // and cannot be applied 

рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд╕рд╛рдзрди


F # рдХреЗ рд▓рд┐рдП рдХрдИ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ C # рдпрд╛ Java рдЕрдиреБрднрд╡ рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдВрдХ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк F # рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ:



F # рд╕реАрдЦрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдХрдИ рдЕрдиреНрдп рддрд░реАрдХреЗ рднреА рд╡рд░реНрдгрд┐рдд рд╣реИрдВред


рдЕрдВрдд рдореЗрдВ, рдПрдл # рд╕рдореБрджрд╛рдп рдмрд╣реБрдд рд╢реБрд░реБрдЖрддреА рдЕрдиреБрдХреВрд▓ рд╣реИред рд╕реНрд▓реИрдХ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╕рдХреНрд░рд┐рдп рдЪреИрдЯ рд╣реИ, рдПрдл # рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдлрд╛рдЙрдВрдбреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рд╢реБрд░реБрдЖрддреА рдХрдорд░реЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛ рдЖрдк рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ ред рд╣рдо рджреГрдврд╝рддрд╛ рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ!


рд░реВрд╕реА рднрд╛рд╖реА рд╕рдореБрджрд╛рдп F # рдХреА рд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рдирд╛ рди рднреВрд▓реЗрдВ! рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рднрд╛рд╖рд╛ рд╕реАрдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЙрдирд╕реЗ рдЪреИрдЯ рд░реВрдо рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА:



рдЕрдиреБрд╡рд╛рдж рд▓реЗрдЦрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


@Kleidemos рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╡рд╛рджрд┐рдд
рдЕрдиреБрд╡рд╛рдж рдФрд░ рд╕рдВрдкрд╛рджрдХреАрдп рдкрд░рд┐рд╡рд░реНрддрди рдПрдл # рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд░реВрд╕реА рднрд╛рд╖реА рд╕рдореБрджрд╛рдп рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рд╕реЗ рдХрд┐рдП рдЧрдП рдереЗред рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП рдЗрд╕ рд▓реЗрдЦ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо @schvepsss рдФрд░ @ рд╢рд╛рд╡рд░ рдХрд╛ рднреА рд╢реБрдХреНрд░рд┐рдпрд╛ рдЕрджрд╛ рдХрд░рддреЗ рд╣реИрдВ ред

Source: https://habr.com/ru/post/hi430620/


All Articles