рдПрдл # 10: рд╕реВрдЪреА

рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЧрдВрднреАрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рд╣рдореЗрд╢рд╛ рд╕реВрдЪрд┐рдпрд╛рдБ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреАред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдХрд░ рдкреНрд░рд╕рдиреНрдирддрд╛ рд╣реЛрдЧреА рдХрд┐ F # рдмрд╣реБрдд, рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЗрд╕рдХреЗ рд╕реВрдЪреА рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реВрдЪрд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред F # рдореЗрдВ рдПрдХ рд╕реВрдЪреА рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рдХреНрд░рдордмрджреНрдз, рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИред

рдПрдХ рд╕реВрдЪреА рдмрдирд╛рдПрдВ


F # рдореЗрдВ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ рдЬрд┐рдирд╕реЗ рдЖрдк рдПрдХ рд╕реВрдЪреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

  • рдПрдХ рдЦрд╛рд▓реА рд╕реВрдЪреА рдмрдирд╛рдПрдБ
  • 1 рд╕реЗ 10 рддрдХ рдЖрдЗрдЯрдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рд╕реВрдЪреА рдмрдирд╛рдПрдВ
  • 1 рд╕реЗ 10 рддрдХ рдХреА рд╕реАрдорд╛ рдореЗрдВ рд╡рд┐рд╖рдо рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реВрдЪреА рдмрдирд╛рдПрдВ
  • рд╕реВрдЪреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

let prettyPrint desc list = printfn desc printfn "%A" list //empty list let listEmpty = [] //simple list let list1 = [1 .. 10 ] //simple list, with step value let list2 = [1 ..2..10 ] //using for loops to create lists let list3 = [for i in 1 .. 10 -> i*2 ] prettyPrint "let listEmpty = []" listEmpty prettyPrint "let list1 = [ 1 .. 10 ]" list1 prettyPrint "let list2 = [ 1 .. 2..10 ]" list2 prettyPrint "[ for i in 1 .. 10 -> i*2 ]" list3 

рдЫрд╡рд┐

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

рд╕реВрдЪреА рд╕рдордЭ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдорд╛рдирдХ F # рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реВрдЪрд┐рдпрд╛рдВ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди / рд▓реВрдк / рд╢рд░реНрддреЗрдВ рдЖрджрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрддреЗ рд░рд╣реЗрдВ рдХрд┐ рд╣рдо рд╕реВрдЪреА рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

 let is2 x = match x with | 2 -> "YES" | _ -> "NO" //yield directly let list1 = [ yield 1; yield 2; yield 3; ] //yield numbers between 1 and 20 where we use the //Math.Pow function to return a new number let list2 = [for i in 1.0 .. 20.0 do yield Math.Pow(i,2.0) ] //yield only numbers between 1 and 20 that //can be divided by 5 let list3 = [ for i in 1 .. 20 do if i % 5 = 0 then yield i ] //yields YES/NO strings depending on //whether source int = 2 or not let list4 = [for i in 1 .. 5 -> is2 i ] 

рдЫрд╡рд┐

рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд╕реВрдЪреА рдСрдкрд░реЗрдЯрд░


рдХрдВрд╕ рдСрдкрд░реЗрдЯрд░


рд╣рдо рдореМрдЬреВрджрд╛ рд╕реВрдЪреА рдореЗрдВ рдорд╛рди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП "рдСрдкрд░реЗрдЯрд░" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рд╕реВрдЪреА рдереА:

 let list1 = [1;2;3;4] let list2 = 42 :: list1 

рдЫрд╡рд┐

рд╕рд╛рдВрддреНрд╡рдирд╛ рджреЗрдиреЗрд╡рд╛рд▓рд╛ рд╕рдВрдЪрд╛рд▓рдХ


рдПрдХ рдФрд░ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдСрдкрд░реЗрдЯрд░ "@" рдСрдкрд░реЗрдЯрд░ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдерд╛:

 let list1 = [1;2;3;4] let list2 = [5;6;7;8] let list3 = list1 @ list2 

рдЫрд╡рд┐

рд╕реВрдЪреА рдореЙрдбреНрдпреВрд▓


рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЕрддрд┐ рдХрд░рддрд╛ рд╣реВрдВ рдЬрдм рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕реВрдЪреА рдореЙрдбреНрдпреВрд▓ рдПрдл # рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореЙрдбреНрдпреВрд▓ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП MSDN рдкреНрд░рд▓реЗрдЦрди F # рдореЗрдВ рджреВрд╕рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВ MSDN рдкрд░ рдкрд╛рдП рдЧрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреБрдЫ рджреЗ рджреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП MSDN рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ред

рдЧреБрдг


Head
'T
рдкрд╣рд▓рд╛ рддрддреНрд╡
Empty
'T list
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рдЦрд╛рд▓реА рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИ
IsEmpty
bool
рд╕рдЪ - рдЕрдЧрд░ рд╕реВрдЪреА рдореЗрдВ рдХреЛрдИ рддрддреНрд╡ рдирд╣реАрдВ рд╣реИрдВ
рдордж
'рдЯреА
рдПрдХ рдЖрдЗрдЯрдо рдЬреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реВрдЪрдХрд╛рдВрдХ рдкрд░ рд╣реИ
рд▓рдВрдмрд╛рдИ
рдкреВрд░реНрдгрд╛рдВрдХ
рдорджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛
рдкреВрдВрдЫ
'рдЯреА рд╕реВрдЪреА
рдкрд╣рд▓реА рдЖрдЗрдЯрдо рдХреЗ рдмрд┐рдирд╛ рд╕реВрдЪреА:

 let list1 = [ 1; 2; 3 ] // Properties printfn "list1.IsEmpty is %b" (list1.IsEmpty) printfn "list1.Length is %d" (list1.Length) printfn "list1.Head is %d" (list1.Head) printfn "list1.Tail.Head is %d" (list1.Tail.Head) printfn "list1.Tail.Tail.Head is %d" (list1.Tail.Tail.Head) printfn "list1.Item(1) is %d" (list1.Item(1)) 

рдЫрд╡рд┐

рдлрд╝рд┐рд▓реНрдЯрд░ (рдлрд╝рд┐рд▓реНрдЯрд░)


рдПрдХ рдирдпрд╛ рд╕рдВрдЧреНрд░рд╣ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рджрд┐рдП рдЧрдП рд╡рд┐рдзреЗрдп рд╕рд╣реА рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдПрдХ рддреБрдЪреНрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдПрдХ рд╕реВрдЪреА рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдирдИ рд╕реВрдЪреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ

 let evenOnlyList = List.filter (fun x -> x % 2 = 0) [1; 2; 3; 4; 5; 6] 

рдЫрд╡рд┐

рдЦреЛрдЬреЗрдВ (рдЦреЛрдЬреЗрдВ)


рдкрд╣рд▓рд╛ рддрддреНрд╡ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╕рд╣реА рд╣реИред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЪреВрдВрдХрд┐ 1 рд╕реЗ 100 рддрдХ рдХреА рд╕реВрдЪреА рдореЗрдВ 5 рд╣реИ, 5 рдореЗрдВ 1 рдирдВрдмрд░ рд╣реИ, рдЬреЛ 5 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд░рд┐рдЯрд░реНрди рд╣реИ:

рдЫрд╡рд┐

рд╕рднреА рдХреЗ рд▓рд┐рдП (forall)


рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рднреА рддрддреНрд╡ рджрд┐рдП рдЧрдП рд╡рд┐рдзреЗрдп рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕рд╣реА рд╡рд╛рдкрд╕реА рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рд╕реВрдЪреА рдореЗрдВ 0 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

 let isAllZeroes list = List.forall (fun elem -> elem = 0.0) list printfn "%b" (isAllZeroes [0.0; 0.0]) printfn "%b" (isAllZeroes [0.0; 1.0]) 

рдЫрд╡рд┐

рд╕рднреА рдкрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ (Iteri)


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

 let data = ["Cats";"Dogs";"Mice";"Elephants"] data |> List.iteri (fun ix -> printfn "item %d: %s" ix) 

рдЫрд╡рд┐

рджреНрд╡рд╛рд░рд╛ рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВ (SortWith)


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

 let list1 = [ ""; "&"; "&&"; "&&&"; ""; "|"; "||"; "|||" ] printfn "Before sorting: " list1 |> printfn "%A" //custom sorting function let sortFunction (string1:string) (string2:string) = if (string1.Length > string2.Length) then 1 else if (string1.Length printfn "After sorting:\n%A" 

рдЫрд╡рд┐

рд╕реВрдЪреА рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХрдИ рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп рд╣реИрдВ, рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд╕реВрдЪрд┐рдпреЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдирдЬрд╝рд░


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

 let printIt desc x = printfn "%A %A" desc x let rec printList list = match list with | h :: t -> printIt "head=" h printIt "tail=" t printList t | [] -> () printList [1;2;3;4;5] 

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

рдЫрд╡рд┐

рддреЛ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдирд┐рдореНрди рд╕реВрдЪреА [1] рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рдереЛрдбрд╝реЗ рдЕрдзрд┐рдХ рд╣реИрдВ; 2; 3; 4; 5]

рдЫрд╡рд┐

рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рддрдм рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ рдЬрдм рдореВрд▓реНрдп рдПрдХ рдЦрд╛рд▓реА рд╕реВрдЪреА рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛ред

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


All Articles