[ рдкрд┐рдЫрд▓рд╛ рдкреЛрд╕реНрдЯ ]рдкрд░рд┐рдЪрдп

рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ, рдпрд╛ рдирд╣реАрдВ, рдирд┐рд░рдВрддрд░рддрд╛ред рдЖрдЬ, рд╣рдо рдиреАрд▓реЗ рд░рдВрдЧ рдХреА рдЧреЛрд▓реА рдХреЛ рдирд┐рдЧрд▓рддреЗ рд╣реИрдВ, рдЧрд░реНрд╡ рд╕реЗ рдПрдлрдкреА (рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ) рдХреЛ рдЕрд╡рддрд╛рд░ рд▓реЗрддреЗ рд╣реИрдВ, рдФрд░ рдПрдл # рдХреЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рдЧ рдореЗрдВ рдЧрд╣рд░рд╛ рдЧреЛрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВред рдЪрд▓реЛ рдХрд╛рд░реНрдпреЛрдВ, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐, рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ? рдлрд┐рд░ рдЧреЛрд▓реА рдирд┐рдЧрд▓ рд▓реЗрдВ рдФрд░ рдЧреЛрддрд╛ рд▓рдЧрд╛рдПрдБред
рд╡рд┐рд╕рд░реНрдЬрди

рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдлрдкреА рдХреА рдЙрддреНрдкрддреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, ╬╗-рдкрдерд░реАред рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрд╣ рдЕрд▓реЛрдВрдЬреЛ рдЪрд░реНрдЪ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдпрд╣ рдЧрдгрд┐рддреАрдп рд╕рд┐рджреНрдзрд╛рдВрдд рдерд╛ рдЬрд┐рд╕рдиреЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдиреАрдВрд╡ рд░рдЦреАред рдореИрдВ рдЧрдгрд┐рдд рдкрд░ рдПрдХ рд▓рдВрдмрд╛ рдФрд░ рдердХрд╛рдК рд╡реНрдпрд╛рдЦреНрдпрд╛рди рдирд╣реАрдВ рджреВрдВрдЧрд╛, рдореИрдВ рдмрд╕ рдЖрдкрдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред рдЕрдВрдд рдореЗрдВ, рдлрд┐рд░ рдХрд┐рд╕реА рдХреЛ рдЕрдкрдиреЗ рдЬреНрдЮрд╛рди рд╕реЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рди рдХреЗрд╡рд▓ рдПрдл # рдореЗрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреА рдЧрдгрд┐рддреАрдп рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рднреАред рдХреНрдпрд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, ╬╗-рдкрдерд░реА рдХреЗ рд▓рд┐рдП рдпрд╣ рднрдпрд╛рдирдХ рдирд╛рдо рд╣реИ? рд╡рд╣ рдЪрд░реНрдЪ рдЧрдгрд┐рдд рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рддрд╛рдХрд┐ рдореМрд▓рд┐рдХ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ - рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдирдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИред тАЬрдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ? рдлрд╝рдВрдХреНрд╢рди рдХреА рдореМрдЬреВрджрд╛ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛? тАЭрдкрд╛рдардХ рдкреВрдЫреЗрдЧрд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЧрдгрд┐рддрдЬреНрдЮ рд╣рд░ рдЬрдЧрд╣ рдФрд░ рд╣рд░ рдЬрдЧрд╣ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдФрд░, рдЕрдХреНрд╕рд░, рд╡реЗ рдПрдХ рдирд╛рдо рджреЗрдиреЗ рдореЗрдВ рд╕рд╣рдЬ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рд╕рднреА рд╕реНрдХреВрд▓реЛрдВ / рд╕рдВрд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рд╕рд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рдерд╛:
f(x) = x - 5
f(6) = 6 - 5 = 1
рддрдм рдЕрд▓реЛрдВрдЬреЛ рдПрдХ рд╕рдВрдХреЗрддрди рдХреЗ рд╕рд╛рде рдЖрдпрд╛, рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд╛рдо рджрд┐рдП рдмрд┐рдирд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
╬╗x.x-5
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЗрд╕рдХрд╛ рдХреЛрдИ рдирд╛рдо рдирд╣реАрдВ рд╣реИред рд╡рд╣ рддрд░реНрдХ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
(╬╗x.x - 5) 6 = 6 - 5 = 1
рдПрдХ рдФрд░ ╬╗-function рдХреЛ ╬╗-function рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдорд┐рд▓реЗ рд▓рдВрдмреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпрдХреНрд╖ рд╕рд╛рджреГрд╢реНрдп рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реЗ рд╣реИрдВред
тАЬрдмрдХрд╡рд╛рд╕ рдХрд░рдирд╛ рдмрдВрдж рдХрд░реЛ! рдЕрдзрд┐рдХ рдХреЛрдбред тАЭ

рдФрд░ рдореИрдВ рд▓рдЧрднрдЧ рдЧрдгрд┐рдд рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рд▓рдЧрднрдЧред рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИред рдЕрдм рд╣рдо рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдлрд╝рдВрдХреНрд╢рди (рд╕реНрд╡рдпрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ) рд▓рд┐рдЦреЗрдВрдЧреЗред рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐ рд╕рдВрдЦреНрдпрд╛рдПрдБ - рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рдХреНрд░рдо, рдЬрд╣рд╛рдБ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рдХреЗ рдпреЛрдЧ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддреА рд╣реИ:
Fib = {0, 1, 1, 2, 3, 5, 8, ...}
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреА рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдлрд╝рд┐рдмреЛрдирд╛рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдЗрд╕рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд▓реМрдЯрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
f(n) = f(n - 1) + f(n - 2)
f(1) = 1
f(2) = 1
рдФрд░ рдЗрд╕ рддрд░рд╣ F # рдкрд░:
let rec fib n = match n with | 1 | 2 -> 1 | n -> fib(n-1) + fib(n-2)
рдпрд╣рд╛рдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдирдП рдХреАрд╡рд░реНрдб рд╣реИрдВ:
- rec - рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╣реИ
- рдореИрдЪ, рдПрдХ рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рддрдВрддреНрд░ рд╣реИ, C # рдпрд╛ C / C ++ рдкреИрдЯрд░реНрди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдЬрд┐рдиреНрд╣реЗрдВ рд╕реНрдЯреЗрд░реЙрдпрдб рдкрд░ рд╕реНрд╡рд┐рдЪ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдлрдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ: рдпрджрд┐ рддрд░реНрдХ n 1 рдпрд╛ 2 рд╣реИ, рддреЛ рд╣рдо 1 рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рд╣рдо рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рджреЛ рдкрд┐рдЫрд▓реА рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдпреЛрдЧ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдЪ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд╡рд╛рдкрд╕ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдПрдХ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдл # рдореЗрдВ рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛

рдЕрдкрдиреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ, рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ, рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЕрдм рддрдХ, рд╣рдо рдХреБрдЫ рднреА рд╕рдордЭрджрд╛рд░ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рд┐рд░реНрдл int рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:
type myInt = int
tuples

Tuple, рдпрд╛ Tuple, F # рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдорд┐рд╢реНрд░рд┐рдд рдкреНрд░рдХрд╛рд░ рд╣реИред рдХреНрдпрд╛ рдФрд░ рдХреИрд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
// int*int; * - let point2d = (10, 5) // int*int*int let point3d = (1, 1, 2) // string*int let personAndId = ("Some Name", 3) let x2d = fst point2d let y2d = snd point2d
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдг рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдЯрдкрд▓ рджреЛ рдпрд╛ рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдВрдпреЛрдЬрди рд╣реИ (рдирд╛рдо рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдкреЙрдЗрдВрдЯ 2 рдбреА рдФрд░ рдкреЙрдЗрдВрдЯ 3 рдбреА 2-рдЖрдпрд╛рдореА рдФрд░ 3-рдЖрдпрд╛рдореА рд╡рд┐рдорд╛рдиреЛрдВ, рд╡реНрдпрдХреНрддрд┐рдПрдВрдбрдЖрдИрдб - рдирд╛рдо рдФрд░ рдЖрдИрдбреА рдкрд░ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред рдЯреНрдпреВрдкрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдПрдл # рдорд╛рдирдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рджреЛ рдХрд╛рд░реНрдп рд╣реИрдВ: рдПрдлрдПрд╕рдЯреА рдФрд░ рдПрд╕рдПрдирдбреА, рдЬреЛ рдХреНрд░рдорд╢рдГ рдЯрдкрд▓ рдХреЗ рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рддрддреНрд╡ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рддреАрд╕рд░рд╛ рдЖрдЗрдЯрдо рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?
рдпрд╣рд╛рдБ рдПрдХ рдЯрдкрд▓ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
// -; string, int type personAndId = string*int // personAndId; : , let person:personAndId = ("Habr", 1)
рд░рд┐рдХреЙрд░реНрдб рдЙрд░реНрдл тАЛтАЛрд░рд┐рдХреЙрд░реНрдб

рдмреЗрд╢рдХ, рдпрд╣ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд░рд┐рдХреЙрд░реНрдб рдПрдл # рдХреА рдПрдХ рдФрд░ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдЗрдХрд╛рдИ рд╣реИред рд╡реЗ tuples рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВ рдХрд┐ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рдирд╛рдо рд╣реИ, рд╕рд╛рдордЧреНрд░реА рдЕрднреА рднреА рдХреЛрдИ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИред рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
type person = {name : string; surname : string; id : int} let sampleUser = {name = "Habra"; surname = "Habr"; id = 1} let sampleUserName = sampleUser.name
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд╡рд┐рднреЗрджрд┐рдд рд╕рдВрдШ, рдпрд╛ рдЯреИрдЧ рдХрд┐рдП рдЧрдП рд╕рдВрдШ

рдЕрдЧрд▓реА рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдЗрдХрд╛рдИ рд╕рдВрдШ рд╣реИред рд╡реЗ рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдПрдХ рд╕рд░рд▓ рдЬреЛрдбрд╝ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
type Currency = | Liter of float | Pint of float let liter = Liter 5.0 let pint = Pint 10.0
рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди, рдпрд╛ рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди

рдЕрдм рдЬрдм рдкрд╛рдардХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдл # рдХреА рдмреБрдирд┐рдпрд╛рджреА рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдЬрд╛рдирддрд╛ рд╣реИ, рддреЛ рд╣рдо рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдЪ рдХреБрдЫ рд╣рдж рддрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рдФрд░ OO рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕реНрд╡рд┐рдЪ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдХреЗрд╡рд▓ рдпрд╣ рдмрд╣реБрдд рд╡реНрдпрд╛рдкрдХ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рд╕реАрдорд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рд╕рдВрднрд╛рд╡рд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреА рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдХрд╡рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдмреЗрддреБрдХрд╛ рд▓рдЧрддрд╛ рд╣реИред
// , let isOdd n = (n % 2 = 1) // , 1 3 let oneToThree n = match n with | 1 -> printfn "One" | 2 -> printfn "Two" | 3 -> printfn "Three" // ; _ n | n -> printfn "Geather than three" // type Point = int * int // matching' let findZero point = match point with | (0, 0) -> printfn "x = 0 and y = 0" | (0, y) -> printfn "(0, %d)" y | (x, 0) -> printfn "(%d, 0)" x | _ -> printfn "x <> 0 and y <> 0" type Person = | NameOnly of string | IdOnly of int // - | IdAndName of string * int // matching' let personInfo person = match person with | NameOnly(name) -> printf "Name is %s" name | IdOnly(id) -> printf "Id is %d" id | IdAndName(name, id) -> printf "Name is %s and Id is %d?" name id // matching'a let matchWithCondition x = match x with | x when x >= 5. && x <= 10. -> printfn "x is between 5.0 and 10.0" | _ -> ()
рдПрдХ рдЕрдзрд┐рдХ рд╕рдВрдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░

рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╡реГрдХреНрд╖ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рддрд╛рд░ рдХрд╛ рдПрдХ рдкреЗрдбрд╝, рдХрд┐рд▓реЛрдВ рдХрд╛ рдПрдХ рдкреЗрдбрд╝, рдЖрджрд┐ред рдПрдл # рдореЗрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
// ' type 'a BinaryTree = // , - | Node of 'a BinaryTree * 'a BinaryTree | Value of 'a (* : type BinaryTree<'a> = | Node of BinaryTree<'a> * BinaryTree<'a> | Value of 'a *) // , , let tree1 = Node( Node (Value 1, Value 2), Node (Value 5, Value 100) ) let tree2 = Node( Node (Value "Binary tree", Value "in F#"), Node (Value "is so", Value "Simple") )
рд╣рд╛рдБ, F # рдкрд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдмрд╛рдЗрдирд░реА рдЯреНрд░реА рдРрд╕рд╛ рд╣реА рджрд┐рдЦрддрд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖

рдЦреИрд░ рдореИрдВ рдХреНрдпрд╛ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╡реНрдпрд░реНрде рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ рдФрд░ рдХрдИ рд▓реЛрдЧ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рднреА рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред рдЕрдЧрд▓реА рдмрд╛рд░, рд╣рдо рдиреАрд▓реА рдЧреЛрд▓рд┐рдпреЛрдВ рдХреЛ рдирд┐рдЧрд▓рддреЗ рд░рд╣реЗрдВрдЧреЗ, рд╕реВрдЪрд┐рдпреЛрдВ рдФрд░ рдЕрдиреБрдХреНрд░рдореЛрдВ, рдХрд░реА рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдХреНрдпрд╛ рдкрдврд╝рдирд╛ рд╣реИ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ,
msdn , рд╡рд╣рд╛рдБ рдЖрдк рдЖрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдЧрдИ рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдЯреЙрдорд╕ рдкреЗрдЯреНрд░рд┐рд╕рдХ, рдЬреЙрди рд╕реНрдХреАрдЯ) рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдирд┐рд╡рд╛рд░реНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкрдж рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╡рд╣рд╛рдВ рд╕реЗ рд▓рд┐рдП рдЧрдП рдереЗред
рдЙрдирдХреЗ рд▓рд┐рдП рдЬреЛ рдХрдо рдереЗ
рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдКрдкрд░ рджрд┐рдП рдЧрдП рдкреЛрд╕реНрдЯ рдореЗрдВ рдЬреЛ рдХреЛрдб рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рд╡рд╣ рднрдпрд╛рдирдХ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЗрд╕реЗ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реИред рдФрд░ рдЬреЛ рд▓реЛрдЧ рдПрдХ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдореИрдВ рдПрдХ рдЕрдзрд┐рдХ рд╕рдХреНрд╖рдо рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ (рдзрдиреНрдпрд╡рд╛рдж,
рдУрдирд┐рдХрд┐рдпреБрдХрд╛ )
let fib = Seq.unfold (fun state ->Some(fst state + snd state, (snd state, fst state + snd state))) (1,1) fib |> Seq.take 20
рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╣рдо рдЕрдЧрд▓реА рдмрд╛рд░ рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред
рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди
рднрд╛рд╡ рд╡реНрдпрдХреНрдд рдХрд░реЗрдВ
let second (x, y) = y let getValueFromOption (Some value) = value
рдПрдХ рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рддрдВрддреНрд░ рдХрд╛ рднреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред рдзрдиреНрдпрд╡рд╛рдж
jack128 рдФрд░
onikiychuka ред